java常用类08_File类

1.File类基本用法

java.io.File类:代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。

File类的常见构造方法:public File(String pathname)

pathname代表文件路径,该路径可以为相对路径,也可以为绝对路径。如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

【示例】分别以相对路径和绝对路径创建File对象

public static void main(String[] args) throws IOException {
	// 获取当前工作目录路径
	System.out.println(System.getProperty("user.dir"));
	// 1.相对路径创建File对象:默认放到user.dir目录下面
	File file1 = new File("abc.txt");
	// 创建文件
	file1.createNewFile();
	// 2.绝对路径创建File对象
	File file2 = new File("D:/abc.txt");
	// 创建文件
	file2.createNewFile();
}

在eclipse项目开发中,user.dir就是本项目的目录。因此,执行完毕后,在本项目和D盘下都生成了新的文件(如果是eclipse下,一定按F5刷新目录结构才能看到新文件)。如图所示:
在这里插入图片描述
File类的其它构造方法,详情请查看以下表格:

构造方法 描述
public File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
public File(File parent, String child) 根据parent抽象路径名和child路径名字符串创建一个新File实例
public File(String parent, String child) 根据parent路径名字符串和child路径名字符串创建一个新File实例

2.File类获取功能

方法名 描述
public String getName() 返回由此抽象路径名表示的文件或目录的名称。
public String getPath() 返回此抽象路径名的绝对形式(绝对路径或相对路径)。
public String getAbsolutePath() 返回此抽象路径名的绝对形式(绝对路径)。
public long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
public long length() 返回由此抽象路径名表示的文件的长度。

【示例】File类基本获取功能

// 1.相对路径创建File对象
File file = new File("abc.txt");
// 2.获取文件或目录名字
System.out.println(file.getName());
// 3.返回此抽象路径名的绝对形式(绝对路径或相对路径)。 
System.out.println(file.getPath());
// 4.返回此抽象路径名的绝对形式(绝对路径)。 
System.out.println(file.getAbsolutePath());
// 5.返回此抽象路径名表示的文件最后一次被修改的时间 
System.out.println(file.lastModified());
// 6.返回由此抽象路径名表示的文件的长度。 
Sstem.out.println(file.length());

3.File类判断功能

方法名 描述
public boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
public boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
public boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
public boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。

【示例】File类判断功能案例

// 1.相对路径创建File对象
File file = new File("abc.txt");
// 2.测试此抽象路径名表示的文件或目录是否存在。 
System.out.println(file.exists());
// 3.测试此抽象路径名表示的文件是否是一个目录。
System.out.println(file.isDirectory());
// 4.测试此抽象路径名表示的文件是否是一个标准文件。
System.out.println(file.isFile());
// 5.测试此抽象路径名指定的文件是否是一个隐藏文件。
System.out.println(file.isHidden());
// 6.测试应用程序是否可以读取此抽象路径名表示的文件。 
System.out.println(file.canRead());
// 7.测试应用程序是否可以修改此抽象路径名表示的文件。 
System.out.println(file.canWrite());

4.File类其它功能

方法名 描述
public boolean mkdir() 创建此抽象路径名指定的目录。
public boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
public boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
public boolean delete() 删除此抽象路径名表示的文件或目录。
public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
public String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

【示例】File类其它常见功能案例

public static void main(String[] args) throws IOException {
	// 1.mkdir方法使用(G盘下没有demo文件夹)
	File file1 = new File("G:/demo");
	if(!file1.exists()) { // 判断文件夹是够存在
		file1.mkdir(); // 不存在则创建一个文件夹
	}
	// 2.mkdirs方法使用(G盘下没有java和demo文件夹)
	File file2 = new File("G:/java/demo");
	if(!file2.exists()) { // 判断文件夹是够存在
		file2.mkdirs(); // 不存在则创建多个文件夹
	}
	// 3.createNewFile方法使用(G盘下没有abc.txt文件)
	File file3 = new File("G:/abc.txt");
	if(!file3.exists()) { // 判断文件是够存在
		file3.createNewFile(); // 不存在则创建该文件
	}
	// 4.delete方法,删除文件或文件夹
	file1.delete(); // 删除文件文件夹
	file3.delete(); // 删除文件
	// 5.renameTo方法,文件重命名
	file3.renameTo(new File("G:/haha.txt"));
	// 6.list方法,遍历文件和文件夹
	File file4 = new File("G:");
	for(String path : file4.list()) {
		System.out.println(path);
	}
	// 7.listFiles方法,遍历目录中的文件
	for(File file : file4.listFiles()) {
		System.out.println(file);
	}
}

5.File类的过滤器

通过 listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹,但能不能对其进行过滤呢?比如我们只想要一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹呢?

我们是可以先把一个目录下的所有文件和文件夹获取到,并遍历当前获取到所有内容,遍历过

程中在进行筛选,但是这个动作有点麻烦,Java 给我们提供相应的功能来解决这个问题。

查阅 File 类的 API,在查阅时发现 File 类中重载的 listFiles 方法,并且接受指定的过滤器。
在这里插入图片描述
【示例】获取扩展名为.java所有文件

//自定类继承 FilenameFilter过滤器接口
class MyFilenameFilter implements FilenameFilter {
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(".java");
	}
}
// 测试类
public class FileDemo {
	// 获取扩展名为.java所有文件
	public static void main(String[] args) {
		// 创建 File 对象
		File file = new File("C:\\Users\\Administrator\\Desktop\\Java");
		// 获取指定扩展名的文件
		File[] files = file.listFiles(new MyFilenameFilter());
		// 遍历获取到的所有符合条件的文件
		for (File f : files) {
			System.out.println(f.getName());
		}
	}
}

在查阅 API 时,我们发现,在 listFiles(FileFilter filter) 也可以接受一个 FileFilter 过滤器,它和我们讲的 FilenameFilter 有啥区别呢?
在这里插入图片描述
FilenameFilter 过滤器中的 accept 方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。

FileFilter 过滤器中的 accept 方法接受一个参数,这个参数就当前文件或文件夹对象。

当我们需要过滤文件名称时就可以使用 FilenameFilter 这个过滤器,当我们想对当前文件或文件

夹进行过滤,就可以使用 FileFilter ,比如需要当前目录下的所有文件夹,就可以使用 FileFilter 过滤器。

【示例】获取指定目录下的文件

//自定类继承 FileFilter过滤器接口
class MyFileFilter implements FileFilter {
	@Override
	public boolean accept(File pathname) {
		return pathname.isFile();
	}
}
// 测试类
public class FileDemo {
	// 获取指定目录下的文件(排除文件夹)
	public static void main(String[] args) {
		// 创建 File 对象
		File file = new File("C:\\Users\\Administrator\\Desktop\\Java");
		// 获取指定目录下的文件
		File[] files = file.listFiles(new MyFileFilter());
		// 遍历获取到的所有符合条件的文件
		for (File f : files) {
			System.out.println(f.getName());
		}
	}
}

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了92 篇原创文章 · 获赞 0 · 访问量 2591

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104784342