File类:顾名思义就是对操作系统上的文件进行操作的一个类
绝对路径:从盘符开始,是一个文件的完整路径,有唯一性
例 " F:\Program Files\aa.txt "
相对路径:相对于某个目录的路径,不具唯一性
例 " aa.txt "
只要不是以盘符开始的路径就是相对路径,默认的相对位置就是当前项目根目录
构造方法:
public File(String pathname) 通过给定的路径名字符串创建指定路径的File文件对象
File f = new File("F:\\Program Files\\aa.txt");
注:因为在Java编译器中 \会被视为转译符,所以要两个\\才是文件一级一级分割的符号
public File(String parent, String child) 从父路径名字符串和子路径名字符串创建File文件对象
File f = new File("F:\\Program Files","aa.txt");
public File(File parent, String child) 从父File类对象和子路径名字符串创建File文件对象
File f = new File("F:\\Program Files");
File f2 = new File(f,"aa.txt");
File操作方法:
public String getAbsolutePath() 返回File对象的绝对路径字符串
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getAbsolutePath()); //输出F:\Program Files\aa.txt
public String getPath() 返回创建File时的路径名字符串
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getPath()); //输出:F:\Program Files\aa.txt
public String getName() 返回File表示的文件或文件夹的名称
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getName()); //输出:aa.txt
public long length() 返回File表示文件的大小,单位是字节
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.length()); //输出:83
若File指向的是文件夹,则length()方法返回的是不确定值,不代表大小
File getParentFile() 返回父路径文件对象
File f = new File("F:\\Program Files\\aa.txt");
File parentFile = f.getParentFile(); //获得一个File对象
File判断功能方法:
public boolean exists() File表示的文件或文件夹是否实际存在
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.exists()); //输出:true
public boolean isDirectory() File路径表示的文件是否是文件夹
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.isDirectory()); //输出:false
public boolean isFile() File路径表示的文件是否是文件
File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.isFile()); //输出:true
File创建和删除功能方法:
public boolean createNewFile() File路径指的是一个文件名,且该文件不存在时新建一个文件
File f = new File("F:\\Program Files\\bb.txt");
f.createNewFile();
注:父路径必须存在才可以创建,不然会报IOException
public boolean delete() 删除File路径表示的文件,或空文件夹
File f = new File("F:\\Program Files\\bb.txt");
boolean b = f.delete();
System.out.println(b); //输出:true
删除成功返回true,删除失败返回false。若删除的文件夹内还有文件则删除失败
public boolean mkdirs() 创建多级文件夹,无论父路径是否存在
File f = new File("F:\\Program Files\\bb\\cc\\dd\\bb\\aa");
boolean b = f.mkdirs();
System.out.println(b); //输出:true
不能用来创建文件,只能创建文件夹
遍历File文件方法:
String[] list () 遍历File目录中的所有文件和文件夹,存入String[]数组中
File f = new File("F:\\Program Files");
System.out.println(Arrays.toString(f.list()));
//输出:[aa.txt, bb, Blizzard App, CSGO, Steam, TGP]
File[] listFiles() 遍历File目录中的所有文件和文件夹,存入File[] 数组中
File f = new File("F:\\Program Files");
System.out.println(Arrays.toString(f.listFiles()));
//输出:[F:\Program Files\aa.txt,
// F:\Program Files\bb,
// F:\Program Files\Blizzard App,
// F:\Program Files\CSGO,
// F:\Program Files\Steam,
// F:\Program Files\TGP]
FileFilter过滤器接口:
实现该接口的对象可以过滤文件
File[] listFiles (FileFilter fileFilter) 创建FileFilter接口的实现类对象
重写accept()方法,将判断条件写在返回值上,返回true则不过滤,返回false则过滤
File f = new File("F:\\Program Files");
File [] arr = f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
});
System.out.println(Arrays.toString(arr));
上述例子中,return pathname.isFile();
则 F:\Program Files 路径下是文件就会返回true ,否则返回false
最后输出:[F:\Program Files\aa.txt]
File[] 数组中仅剩一个文件File对象 ,文件夹File对象都被过滤掉了
遍历文件夹中所有文件(包括子文件夹内的文件)
要遍历文件夹中子文件夹内的所有文件,就要引用一个方法——递归
public static void main(String[] args) throws IOException {
File f = new File("F:\\Program Files");
getFile(f);
}
public static void getFile(File file) {
File[] arr = file.listFiles();
for (File file1 : arr) {
if (file1.isDirectory()) {
getFile(file1);
} else {
System.out.println(file1.getName());
}
}
}
在循环中,利用if判断File是文件夹,则传回给本方法,再次进行循环判断
直到找到的File全是文件,则该方法就结束不再循环
最终就能找到文件夹中所有子文件夹的文件
这种在本方法中调用自己的方法就是递归