java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

构造方法

File 类代表磁盘中实际存在的文件和目录,通过以下构造方法创建一个File对象:

方法签名 说明
File(File parent, String child) 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例
File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新File实例
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
File(URI uri) 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例

通过路径构造 File 对象说明:File(String pathname)

  1. pathname:该路径可以以文件结尾,也可以以文件夹结尾
  2. 路径支持相对路径和绝对路径
  3. 创建File对象时,只是把字符串的路径封装为 File 对象,不考虑路径的存在与否
  4. 支持 Linux 和 Windows 两种路径格式传入,Windows 文件路径分隔符为 \,需要转义 \,如 C:\1.txt

File 类的静态常量:

  • File.pathSeparator:路径分隔符,在Windows上是分号,在Linux上是冒号
  • File.separator:名称分隔符,在Windows上是反斜杠 \,在Linux上是斜杠 /
    1. // 路径分隔符,在Windows下是";",在Linux系统下为":"
    2. System.out.println("File.pathSeparator = " + File.pathSeparator);
    3. // 文件名称分隔符,在Windows上为"\",在Linux上为"/"
    4. System.out.println("File.separator = " + File.separator);
    注意事项:
    1、在写路径时,不要写成固定的“\”或“/”,而是使用 File.separator 进行分隔
    2、路径不区分大小写

常用API

1、获取文件名:

String getName() 获得文件的名称,不包括路径
String getPath() 获得文件的路径
String getAbsolutePath() 获得文件的绝对路径
String getParent() 获得文件的上一级目录名

2、文件属性测试:

boolean exists() 测试当前File对象表示的文件是否存在
boolean canWrite() 测试当前文件是否可写
boolean canRead() 测试当前文件是否可读
boolean isFile() 测试当前文件是否是文件
boolean isDirectory() 测试当前文件是否是目录

3、文件操作:

long lastModified() 获得文件最后一次修改的时间
long length() 获得文件的长度,以字节为单位
boolean delete() 删除当前文件,成功返回true,失败返回false
boolean renameTo(File dest) 将重新命名当前File对象所表示的文件,成功返回true,失败返回false

文件创建测试:

  • public static File createTempFile(String prefix, String suffix, File directory) throws IOException :在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称,prefix 字符数要大于3,否则抛异常
  • public static File createTempFile(String prefix, String suffix) throws IOException:在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称
  • public boolean createNewFile() throws IOException:当且仅当具有该名称(构造方法中的参数)的文件尚不存在时,创建一个新的空文件 ```java / 静态方法创建文件 / String prefix = “hello”; String suffix = “.txt”;

// 在临时文件夹创建文件:hello6060146720867515331.txt File temp1 = File.createTempFile(prefix, suffix);

// 指定文件的创建路径:hello1848373084835202184.txt File temp2 = File.createTempFile(prefix, suffix, new File(“/“));

/ 实例方法文件操作 / File file = new File(“/自定义.txt”); boolean newFile = file.createNewFile();

// 文件重命名 File rename = new File(“/重命名.txt”); boolean b = file.renameTo(rename);

// 删除创建的文件 boolean delete = temp1.delete(); boolean delete1 = temp2.delete(); boolean delete2 = rename.delete();

  1. 4、目录操作:
  2. | boolean mkdir() | 创建当前File对象指定的目录(只能创建单级文件夹) |
  3. | --- | --- |
  4. | boolean mkdirs() | 创建当前File对象指定的目录(如果父目录不存在,会自动创建) |
  5. | boolean delete() | 删除当前File对象指定的路径(该方法在硬盘直接删除,不经过回收站,谨慎删除) |
  6. | boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件 |
  7. 5、目录遍历:
  8. | String[] list() | 返回当前目录下的文件和目录 |
  9. | --- | --- |
  10. | String[] list(FilenameFilter filter) | 返回当前目录下满足指定过滤器的文件和目录 |
  11. | File[] listFiles() | 返回当前目录下的文件和目录,返回值是File数组 |
  12. | File[] listFiles(FilenameFilter filter) | 返回当前目录下满足指定过滤器的文件和目录 |
  13. 注意事项:
  14. - 上述方法中遍历的是构造方法中给出的目录,且会扫描目录中的所有文件和文件夹(**包括隐藏文件和文件夹**)
  15. - 当构造方法中给出的**目录路径不存在或者路径不是一个目录时,会抛出空指针异常**
  16. - 注意,扫描的仅为文件夹**一级目录下的文件和文件夹名**
  17. 文件过滤接口:
  18. - FilenameFilter.accept(File pathname):测试指定路径名是否在某个路径列表中
  19. - FileFilter.accept(File dir , String name):测试指定 dir 目录中是否包含文件名为 name 的文件
  20. 小案例:递归打印出指定目录下的所有的 .exe 文件
  21. ```java
  22. public class Demo {
  23. public static void main(String[] args) throws IOException {
  24. print(new File("d:/installation"));
  25. files.stream().forEach(e->{
  26. System.out.println(e.getAbsolutePath());
  27. });
  28. }
  29. private static List<File> files = new ArrayList<>();
  30. private final static String EXE = new String(".exe");
  31. private static void print(File file) {
  32. if (file.isDirectory()) {
  33. for (File listFile : Objects.requireNonNull(file.listFiles())) {
  34. print(listFile);
  35. }
  36. } else if (file.isFile() && file.getName().endsWith(EXE)){
  37. files.add(file);
  38. }
  39. }
  40. }