File类具有一个欺骗性的名字,通常你会认为它对应的是一个文件,但事实并非如此。它既可以代表一个特定的文件目录,也可以代表一个目录内一系列文件的名字,FilePath似乎是一个更好的名字。它代表了与平台无关的文件和目录,如果想在程序中操作文件和目录,都可以通过File类来完成,File能新建、删除、重命名文件和目录,File不能访问文件内容本身,如果要访问文件本身,则需要使用输入/输出流。
一、操作目录
目录,我们可以理解成具体的文件夹,下面我们通过两个例子认识一下File类关于目录的操作。
package IO;
import java.io.*;
public class FileTest2 {
public static void main(String[] args) throws IOException {
// 1:传入一个不存在的路径
File f1 = new File("test1");
System.out.println(f1.exists());// 监测是否存在
System.out.println(f1.isFile());// 监测是否是文件
System.out.println(f1.isDirectory());// 监测是否是路径
f1.mkdir();// 创建文件夹
System.out.println(f1.exists());// 监测是否存在
System.out.println("============================================");
// 2:传入一个存在的路径
File f2 = new File("test2");
System.out.println(f2.exists());// 监测是否存在
System.out.println(f2.isFile());// 监测是否是文件
System.out.println(f2.isDirectory());// 监测是否是路径
// 使用list方法来列出当前路径下的所有文件和路径
String[] fileList = f2.list();
System.out.println("======当前路径下所有文件和路径如下=====");
for (String fileName : fileList) {
System.out.println(fileName);
}
System.out.println("============================================");
}
}
输出结果如下:
我们通过以上的例子,可以总结到一下几点:
1.file的构造构造函数既可以传入一个绝对路径,也可以传入一个相对路径。
2.如果传入的字符串不存在对应的路径或文件,则file的既不能确定这个file代表文件还是路径。
3.使用mkdir()方法创建一个文件。
4.使用list()方法,得到该路径下的文件,得到是文件名组成的数组。
二、操作文件
package IO;
import java.io.*;
public class FileTest2 {
public static void main(String[] args) throws IOException {
// 3:传入一个不存在的文件
File f3 = new File("myfile");
System.out.println(f3.exists());// 判断是否存在
System.out.println(f3.isFile());// 判断是否是文件
System.out.println(f3.isDirectory());// 判断是否是文件
f3.createNewFile();//创建文件
System.out.println(f3.getName());// 获得文件的名字
System.out.println(f3.getPath());// 获得文件的路径
System.out.println(f3.getAbsolutePath());// 获得文件的绝对路径
System.out.println("============================================");
// 4:传入一个存在的文件
File f4 = new File("E:\\Computer\\04JAVA\\JavaCode2\\CrazyJava\\file\\file.txt");
System.out.println(f4.exists());// 判断是否存在
System.out.println(f4.isFile());// 判断是否是文件
System.out.println(f4.isDirectory());// 判断是否是文件
System.out.println(f4.getName());// 获得文件的名字
System.out.println(f4.getPath());// 获得文件的路径
System.out.println(f4.getAbsolutePath());// 获得文件的绝对路径
System.out.println("============================================");
}
}
输出结果如下:
通过上面的代码,我们可以知道:
1.可以获得一个文件的相对目录(File()构造函数传入的参数),也可以得到文件的绝对路径。
2.createNewFile()方法创建新的文件。
三、文件过滤器
我们知道文件一般都是有后缀名的,那么如何过滤下面一个目录下的文件呢,java为我们提供了FilenameFilter接口。
package IO;
import java.io.*;
public class FileTest2 {
public static void main(String[] args) throws IOException {
// 5:传入一个存在目录,过滤改目录下的文件
File f5 = new File("E:\\Computer\\04JAVA\\JavaCode2\\CrazyJava\\test2");
MyFilter filter = new MyFilter(".txt");
String[] files = f5.list(filter);
for (String file : files) {
System.out.println(file);
}
System.out.println("============================================");
}
static class MyFilter implements FilenameFilter {
private String type;
public MyFilter(String type) {
this.type = type;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(type);
}
}
}
从上面的程序,我们可以知道,要实现文件过滤,主要有以下步骤:
1.实现FilenameFilter接口,重写accept方法。
2.创建实现接口的类的实例,并指明过滤文件的类型。
3.将接口的实现类作为File类的参数,得到该路径下过滤后的符合规定的条件的文件名数组。
四、总结
通过上面三部分的介绍,我们可以总结一下File这个类操作文件或目录的特点。
1.公共:监测,判断文件/目录是否存在;是否是一个文件;是否是一个目录。
2.文件:创建/删除文件;得到文件名;获得文件的相对路径和绝对路径。
3.路径:创建/删除路径;得到路径下的文件名;过滤路径下的文件名。