一、File类操作文件或目录
1.File操作文件或目录
java.io.File
类是文件和目录 路径名 的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
Java虚拟机中的一个 File 实例表示一个路径,这个路径可能对应一个文件或一个目录。
File
类的实例所表示的路径,可能存在于磁盘上,也可能在磁盘上根本不存在。
public class File
implements Serializable, Comparable<File>
File
类是不可变的; 也就是说,一旦创建,由 File
对象表示的抽象路径名永远不会改
变。
private final String path; // 用于存储file实例表示的路径
File
类提供了用于操作文件或目录的方法,但并不支持访问文件的内容。
2.常量
File
类提供了 4 个表示分隔符的常量:
不同的系统平台下,这四个常量的取值也不相同。
- 在Windows 平台下
- pathSeparator 和 pathSeparatorChar 对应的是 ;
- separator 和 separatorChar 对应的是 \ - Unix / Linux / MAC OS X 平台下
- pathSeparator 和 pathSeparatorChar 对应的是 :
- separator 和 separatorChar 对应的是 /
Windows 下文件路径各层级之间使用 \ 分隔,在代码中 \ 需要转义(使用 \ 转义),
当然还有另外一种方法来分隔,就是使用 / 来分隔。
3.构造方法
File
类提供了 4 个构造方法用于创建File实例:
//通过给定路径字符串创建实例
File file = new File("D:\\斗破苍穹.txt");
File file1 = new File("D:\\temp","凡人修仙传.txt");
//fod 表示不知道是文件还是文件夹
File fod = new File("D:\\temp");
File file2 = new File(fod, "吞噬星空.txt");
4.实例方法
判断是否存在
File
类中的 exists
方法用于判断File
实例所表示的路径是否在磁盘上存在:
public boolean exists()
当File
实例所表示的路径在磁盘上存在时返回 true
,否则返回 false
。
public static void main(String[] args) {
File fod = new File("d:\\temp");
System.out.println("d:\\temp is exist --> " + fod.exists());
File file = new File("d:\\斗破苍穹.txt");
System.out.println("d:\\斗破苍穹.txt is exist --> " + file.exists());
}
判断是否是文件
File
类中的 isFile
方法用于判断File
实例所表示的路径是否是个文件:
public boolean isFile()
File
实例所表示的路径在磁盘上 存在 并且 是个文件 时返回 true
,否则返回 false
。
package com.itlaobing.demo;
import java.io.File;
public class FileTest2 {
public static void main(String[] args) {
File fod = new File("d:\\temp");
System.out.println("d:\\temp is exist --> " + fod.exists()); //true
File file = new File("d:\\斗破苍穹.txt");
System.out.println("d:\\斗破苍穹.txt is exist --> " + file.exists());//false
System.out.println("d:\\\\temp isFile --> " + fod.isFile());//false
System.out.println("d:\\斗破苍穹.txt isFile --> " + file.isFile());//false
}
}
判断是否是目录
File
类中的 isDirectory
方法用于判断File
实例所表示的路径是否是个目录:
public boolean isDirectory()
当File
实例所表示的路径在磁盘上 存在 并且 是个目录 时返回 true
,否则返回 false
。
File fod = new File("d:\\temp");
System.out.println("d:\\temp is Directory --> " + fod.isDirectory());//true
判断是否是隐藏文件
File类中的 isHidden 方法用于判断File实例所表示的路径是否是隐藏目录或隐藏文件:
public boolean isHidden()
当File实例所表示的路径是个隐藏目录或隐藏文件时返回 true ,否则返回 false 。
File fod = new File("d:\\temp");
System.out.println("d:\\temp is Hidden --> " + fod.isHidden());//false
File file2 = new File("d:/Mindjet MindManager_2016_v16.0.152_Key.zip");
System.out.println(file2.isHidden());//true
判断是否是绝对路径
- 绝对路径:从根路径开始的路径
- 相对路径:相对于文件本身的路径
File
类中的isAbsolute
方法用于判断File
实例所表示的路径是否是 绝对路径 :
public boolean isAbsolute()
当File
实例所表示的路径是绝对路径时返回true
,否则返回 false
。
获取路径及名称
File类提供了获取File实例所表示路径对应的目录或文件的名称:
public String getName()
同时也提供了获取File实例所表示路径的方法(以字符串形式返回):
public String getPath()
获取File实例所表示路径的绝对路径
public String getAbsolutePath()
二、文件过滤器
在java.io
包中提供了用于对文件或目录进行过滤的接口:
java.io.FilenameFilter
java.io.FileFilter
结合File
类提供的方法可以实现对文件或目录的过滤:
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
接下来,我们将结合 File
类中的方法讲解 FilenameFilter
和 FileFilter
的用法。
1.FilenameFilter
通过 FilenameFilter
接口的实现类的实例可实现根据文件或目录名称对文件或目录进行过
滤。
FilenameFilter
接口中定义了一个 accept
方法用于实现对文件或目录的过滤:
boolean accept(File dir, String name)
在 accept
方法的参数中:
- 第一个File类型参数类型的参数表示被筛选的文件或目录所在的目录。
- 第二个String类型的参数表示被筛选的文件或目录的名称。
仅当accept
方法返回true
时,被筛选的文件会被保留在筛选后的文件列表中。
public static void main(String[] args) {
//文件名过滤器
FilenameFilter fileter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.indexOf(".txt") >= 0;
}
};
File file = new File("d:/temp");
//所有的文件
String[] strs = file.list();
//过滤后的文件
String[] fileNames = file.list(fileter);
System.out.println(Arrays.toString(strs));
System.out.println(Arrays.toString(fileNames));
}
2.FileFilter
通过 FileFilter
接口的实现类的实例可实现对文件或目录的过滤,不仅可以通过文件名称
或目录名称过滤,也可以通过文件长度(体积)、访问时间等属性来过滤。
FileFilter
接口中定义了一个 accept
方法用于实现对文件或目录的过滤:
boolean accept(File fod)
- File 类型的参数表示被筛选的文件或目录
- 仅当 accept 方法返回 true 时,被筛选的文件或目录会保留在筛选后的列表中
public static void main(String[] args) {
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.lastModified() > 1572080255401L;
}
};
File file = new File("d:/temp");
File[] files = file.listFiles(filter);
System.out.println(Arrays.toString(file.listFiles()));
System.out.println(Arrays.toString(files));
}