1.1 概述

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

  1. /*
  2. * java把电脑中的文件和文件夹封装为类一个file类,我们可以使用file类对文件夹进行操作
  3. * 我们可以使用file类对方法
  4. * 创建一个文件/文件夹
  5. * 删除文件
  6. * 获取文件
  7. * 判断文件是否存在
  8. * 对文件进行遍历
  9. * 重点:
  10. * file:文件
  11. * directory:文件夹
  12. * path:路径
  13. String pathSeparator = File.pathSeparator;
  14. System.out.println(pathSeparator);//路径分隔符 windows:分号";" Linux:冒号":"
  15. String separator= File.separator;
  16. System.out.println(separator);//文件名称分隔符 windows :\ linux:/
  17. //操作路径:
  18. // C:\roderick\study\a.txt Windows
  19. // C:/roderick/study/a.txt Linux
  20. //-> "C:"+File.separator+"roderick"+File.separator+"a.txt" 通用
  21. /*
  22. * 路径:
  23. * 绝对路径:完整路径
  24. * 以盘符开始对路径 -> c:\\a.txt(windows)
  25. * 相对路径:简化路径
  26. * 相对与当前项目的根目录 省略项目根目录
  27. * 注意:
  28. * 路径不区分大小写
  29. * 路径中的文件名称分隔符-> \\ (windows 转义字符,需要写两个\) / (Linux)
  30. * */

1.2 构造方法

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
  • 构造举例,代码如下:
  1. /*
  2. File类构造方法
  3. */
  4. //show01();
  5. //show02("/User","/a.txt");
  6. show03();
  7. }
  8. /*
  9. * File(File parent,String child)
  10. * 父路径变成了File类型
  11. * 父路径可以使用File方法对路径进行一些操作,再使用路径创建对象*/
  12. private static void show03() {
  13. File parent=new File("/User");
  14. File file =new File(parent,"/hello.txt");
  15. System.out.println(file);// /User/hello.txt
  16. }
  17. /*
  18. * File(String parent,String child) 根据parent路径名字符串和child路径名字符串创建一个新的File实例
  19. * 参数:吧路径分成两部分
  20. * String parent 父路径
  21. * String child 子路径
  22. * 好处:
  23. * 父路径和子路径可以单独书写,使用起来灵活,父路径和子路径都可以变化*/
  24. private static void show02(String parent,String child) {
  25. File file=new File(parent,child);
  26. System.out.println(file);// /User/a.txt
  27. }
  28. /*File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例*/
  29. private static void show01(){
  30. File f1=new File("/Users/roderickkk/学习/Java代码/Java-project/level2-code/src/code/day08File/Demo01File/a.txt");
  31. System.out.println(f1);//打印了路径, 重写了toString方法
  32. File f2=new File("/Users/roderickkk/学习/Java代码/Java-project/level2-code/src/code/day08File/Demo01File");
  33. System.out.println(f2);
  34. File f3=new File("b.txt");//相对路径
  35. System.out.println(f3);//b.txt
  36. }

1.3 常用方法

获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。
    方法演示,代码如下: ```java public class FileGet { public static void main(String[] args) {

    1. File f = new File("d:/aaa/bbb.java");
    2. System.out.println("文件绝对路径:"+f.getAbsolutePath());
    3. System.out.println("文件构造路径:"+f.getPath());
    4. System.out.println("文件名称:"+f.getName());
    5. System.out.println("文件长度:"+f.length()+"字节");
    6. File f2 = new File("d:/aaa");
    7. System.out.println("目录绝对路径:"+f2.getAbsolutePath());
    8. System.out.println("目录构造路径:"+f2.getPath());
    9. System.out.println("目录名称:"+f2.getName());
    10. System.out.println("目录长度:"+f2.length());

    } } 输出结果: 文件绝对路径:d:\aaa\bbb.java 文件构造路径:d:\aaa\bbb.java 文件名称:bbb.java 文件长度:636字节

目录绝对路径:d:\aaa 目录构造路径:d:\aaa 目录名称:aaa 目录长度:4096


> API中说明:length(),表示文件的长度。但是File对象表示目录,则返回值未指定。


<a name="1b076efb"></a>
#### 绝对路径和相对路径

- **绝对路径**:从盘符开始的路径,这是一个完整的路径。
- **相对路径**:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

```java
public class FilePath {
    public static void main(String[] args) {
          // D盘下的bbb.java文件
        File f = new File("D:\\bbb.java");
        System.out.println(f.getAbsolutePath());

        // 项目下的bbb.java文件
        File f2 = new File("bbb.java");
        System.out.println(f2.getAbsolutePath());
    }
}
输出结果:
D:\bbb.java
D:\idea_project_test4\bbb.java

判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

方法演示,代码如下:

                File f1=new File("/Users/roderickkk/Desktop/4.docx");
        System.out.println(f1.exists());//true

        File f2=new File("/Users/roderickkk/Desktop");

        System.out.println(f1.isDirectory());//false  该路径是文件而不是目录
        System.out.println(f2.isDirectory());//true

        System.out.println(f1.isFile());//true
        System.out.println(f2.isFile());//false 该路径是文件夹

创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

方法演示,代码如下:

public class FileCreateDelete {
    public static void main(String[] args) throws IOException {
        // 文件的创建
        //createNewFile声明抛出了IOException异常
      File f1=new File("/Users/roderickkk/学习/Java代码/Java-project/level2-code/src/code/day08File/Demo01File/1.txt");
        System.out.println(f1.exists());//false
        boolean b1= f1.createNewFile();
        System.out.println(b1);//true
          System.out.println(f1.exists());//true

         //创建文件夹
        /*
        * public boolean mkdir(): 创建单级空文件夹
        * public boolean mkdirs(): 既可以创建单级也可以创建多级空文件夹*/
        File f2=new File("/Users/roderickkk/Desktop/newFile");
        boolean b2=f2.mkdir();
        System.out.println("b2:"+b2);//b2:true

    File f3=new    File("/Users/roderickkk/Desktop/newFile/newFile2/newFile3");
        boolean b3=f3.mkdirs();//创建多级文件夹
        System.out.println("b3:"+b3);//b3:true

          // 文件的删除
           System.out.println(f.delete());// true

          // 目录的删除
        //删除文件夹(文件夹中不能有东西)
      File f4=new File("/Users/roderickkk/Desktop/newFile/newFile2/newFile3");
        boolean b4= f4.delete();
        System.out.println("b4:"+b4);//b4:true
    }
}

API中说明:delete方法,如果此File表示目录,则目录必须为空才能删除。

1.4 目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录
//遍历文件夹(能够显示隐藏文件夹) 返回一个String数组,表示该目录下的所有子文件或目录
String[] arr=f1.list();
for (String s : arr) {
    System.out.println(s);
}

//listFiles 返回一个File类型的数组 
File[] listFile = f1.listFiles();
for (File file : listFile) {
    System.out.println(file); //打印路径    
}