File 类概述

File 类在包 java.io.File 下、代表操作系统的文件对象(文件、文件夹)。
File 类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。

File 类创建对象

  • public File(String pathname):根据文件路径创建文件对象。Creates a new File instance by converting the given pathname string into an abstract pathname.
  • public File(String parent, String child):从父路径名字符串和子路径名字符串创建文件对象。Creates a new File instance from a parent pathname string and a child pathname string。
  • public File(File parent, String child):根据父路径对应文件对象和子路径名字符串创建文件对象。Creates a new File instance from a parent abstract pathname and a child pathname string. ```java // 1、创建 File 对象(指定了文件的路径) File f1 = new File(“D:\resources\picture.png”); File f2 = new File(“D:/resources/picture.png”); File f3 = new File(“D:” + File.separator + “resources” + File.separator + “picture.png”); long size = f1.length(); // 是文件的字节大小 System.out.println(size);

// 2、File 创建对象,支持绝对路径 支持相对路径(重点) // 绝对路径 File f4 = new File(“D:\resources\picture.png”); System.out.println(f4.length());

// 相对路径:一般定位模块中的文件的。 相对到工程下!! File f5 = new File(“src\main\java\file\data.txt”); System.out.println(f5.getAbsolutePath()); System.out.println(f5.length());

// 3、File创建对象 ,可以是文件也可以是文件夹 File f6 = new File(“D:\resources”); // 判断这个路径是否存在,这个文件夹存在否 System.out.println(f6.exists());

  1. <a name="XGDGZ"></a>
  2. ## File 类的常用 API
  3. <a name="GTygl"></a>
  4. ### 判断文件类型、获取文件信息
  5. - `public booleanisDirectory()`:测试此抽象路径名表示的 File 是否为文件夹
  6. - `public booleanisFile()`:测试此抽象路径名表示的 File 是否为文件
  7. - `public boolean exists()`:测试此抽象路径名表示的 File 是否存在
  8. - `public String getAbsolutePath()`:返回此抽象路径名的绝对路径名字符串
  9. - `public String getPath()`:将此抽象路径名转换为路径名字符串
  10. - `public String getName()`:返回由此抽象路径名表示的文件或文件夹的名称
  11. - `public long lastModified()`:返回文件最后修改的时间毫秒值
  12. ```java
  13. // 1.绝对路径创建一个文件对象
  14. File f1 = new File("D:/resources/picture.png");
  15. // a.获取它的绝对路径。
  16. System.out.println(f1.getAbsolutePath());
  17. // b.获取文件定义的时候使用的路径。
  18. System.out.println(f1.getPath());
  19. // c.获取文件的名称:带后缀。
  20. System.out.println(f1.getName());
  21. // d.获取文件的大小:字节个数。
  22. System.out.println(f1.length()); // 字节大小
  23. // e.获取文件的最后修改时间
  24. long time = f1.lastModified();
  25. System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
  26. // f、判断文件是文件还是文件夹
  27. System.out.println(f1.isFile()); // true
  28. System.out.println(f1.isDirectory()); // false
  29. System.out.println("-------------------------");
  30. File f2 = new File("src\\main\\java\\file\\data.txt");
  31. // a.获取它的绝对路径。
  32. System.out.println(f2.getAbsolutePath());
  33. // b.获取文件定义的时候使用的路径。
  34. System.out.println(f2.getPath());
  35. // c.获取文件的名称:带后缀。
  36. System.out.println(f2.getName());
  37. // d.获取文件的大小:字节个数。
  38. System.out.println(f2.length()); // 字节大小
  39. // e.获取文件的最后修改时间
  40. long time1 = f2.lastModified();
  41. System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
  42. // f、判断文件是文件还是文件夹
  43. System.out.println(f2.isFile()); // true
  44. System.out.println(f2.isDirectory()); // false
  45. System.out.println(f2.exists()); // true
  46. File file = new File("D:/");
  47. System.out.println(file.isFile()); // false
  48. System.out.println(file.isDirectory()); // true
  49. System.out.println(file.exists()); // true
  50. File file1 = new File("D:/aaa");
  51. System.out.println(file1.isFile()); // false
  52. System.out.println(file1.isDirectory()); // false
  53. System.out.println(file1.exists()); // false

创建文件、删除文件功能

  • public boolean createNewFile():创建一个新的空的文件
  • public boolean mkdir():只能创建一级文件夹
  • public boolean mkdirs():可以创建多级文件夹
  • public boolean delete():删除由此抽象路径名表示的文件或空文件夹。delete 方法默认只能删除文件和空文件夹。delete 方法直接删除不走回收站 ```java File f = new File(“src\main\java\file\data.txt”); // a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建 System.out.println(f.createNewFile()); File f1 = new File(“src\main\java\file\data2.txt”); System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)

// b.mkdir创建一级目录 File f2 = new File(“D:/resources/test”); System.out.println(f2.mkdir());

// c.mkdirs创建多级目录(重点) File f3 = new File(“D:/resources/aaa/bbb/ccc/ddd”); System.out.println(f3.mkdirs()); // 支持多级创建

// d.删除文件或者空文件夹 System.out.println(f1.delete()); File f4 = new File(“D:/resources/picture.png”); System.out.println(f4.delete()); // 文件占用一样可以删除

// 只能删除空文件夹,不能删除非空文件夹. File f5 = new File(“D:/resources/test”); System.out.println(f5.delete());


<a name="YoAFB"></a>
### 遍历

- `public String[] list()`:获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
- `public File[] listFiles()`:获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
```java
// 1、定位一个目录
File f1 = new File("D:/resources");
String[] names = f1.list();
for (String name : names) {
    System.out.println(name);
}

// 2.一级文件对象
// 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File f : files) {
    System.out.println(f.getAbsolutePath());
}

// 注意事项
File dir = new File("D:/resources/ddd");
File[] files1 = dir.listFiles();
System.out.println(Arrays.toString(files1));

listFiles 方法注意事项:

  • 当调用者不存在时,返回 null
  • 当调用者是一个文件时,返回 null
  • 当调用者是一个空文件夹时,返回一个长度为 0 的数组
  • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回
  • 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏内容
  • 当调用者是一个需要权限才能进入的文件夹时,返回 null

文件搜索实现

/**
 * 1、搜索某个目录下的全部文件,找到我们想要的文件,并启动
 *
 * @param dir      被搜索的源目录
 * @param fileName 被搜索的文件名称
 */
public static void searchFile(File dir, String fileName) {
    // 3、判断dir是否是目录
    if (dir != null && dir.isDirectory()) {
        // 可以找了
        // 4、提取当前目录下的一级文件对象
        File[] files = dir.listFiles(); // null  []
        // 5、判断是否存在一级文件对象,存在才可以遍历
        if (files != null && files.length > 0) {
            for (File file : files) {
                // 6、判断当前遍历的一级文件对象是文件 还是 目录
                if (file.isFile()) {
                    // 7、是不是咱们要找的,是把其路径输出即可
                    if (file.getName().contains(fileName)) {
                        System.out.println("找到了:" + file.getAbsolutePath());
                        // 启动程序
                        try {
                            Runtime r = Runtime.getRuntime();
                            r.exec(file.getAbsolutePath());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                } else {
                    // 8、是文件夹,需要继续递归寻找
                    searchFile(file, fileName);
                }
            }
        }
    } else {
        System.out.println("对不起,当前搜索的位置不是文件夹!");
    }
}

@Test
public void test() {
    // 2、传入目录 和 文件名称
    searchFile(new File("D:\\Application\\Application_Green"), "PotPlayerMini64.exe");
}