Java学习日志(十七): File类详解

JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)

File类

java.io.File类
文件和目录路径名的抽象表示。

概述

File类把计算机中的文件和文件夹封装为File对象,使用File对象中的方法就可以操作文件和文件夹:

可以使用File类的方法,创建一个文件或文件夹
可以使用File类的方法,删除一个文件或文件夹
可以使用File类的方法,获取一个文件或文件夹的路径
可以使用File类的方法,遍历文件夹

需要掌握三个基本单词:

path:路径
file:文件
directory:文件夹(目录)

路径

路径分为绝对路径相对路径

绝对路径:以盘符开始的路径,如: c:\1.jpg
相对路径:相对于我们的项目根目录而言,使用项目根目录作为路径,可以省略书写。

例如:需要在项目的根目录创建一个1.txt文件,则可以使用相对路径进行创建。
项目的根目录:D:\Program Files\IDEA Projects\EmploymentClass
相对路径:1.txt
绝对路径:D:\Program Files\IDEA Projects\EmploymentClass\1.txt

简单记:没有写盘符的,都是相对路径
注意:路径不区分大小写

构造方法

File类的构造方法

  • File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
  • File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。

一 、File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
参数:
pathname:就是一个文件/文件夹的路径

注意:

  1. 构造方法传递的路径可以是绝对路径,也可以是相对路径
  2. 构造方法传递的路径可以是以文件结尾的,也可以是以文件夹结尾
  3. 构造方法传递的路径,是存在的或不存在的都可以
    构造方法仅仅把字符串的路径封装为File对象,不考虑真实性

示例:

private static void show01() {
    File f1 = new File("d:\\1.txt");
    System.out.println(f1);//d:\1.txt

    File f2 = new File("D:\\Program Files\\IDEA Projects\\EmploymentClass\\1.txt");
    System.out.println(f2);//D:\Program Files\IDEA Projects\EmploymentClass\1.txt

    File f3 = new File("1.txt");//省略了根目录
    System.out.println(f3);//1.txt

    File f4 = new File("day09\\abc");//省略了根目录
    System.out.println(f4);//day09\abc
}

二、File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
参数:

  • String parent:父路径
  • String child:子路径

好处:把路径分为了父路径和子路径,使用路径更加灵活,可以传递不同的父路径和子路径来组成不同的File对象。

示例:

private static void show02() {
    //String parent = "d:\\";
    String parent = "e:\\";
    String child = "a.txt";

    File f = new File(parent,child);
    System.out.println(f);//d:\a.txt   e:\a.txt

}

三、File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
参数:

  • File parent:父路径
  • String child:子路径

好处:把路径分为了父路径和子路径,使用路径更加灵活,可以传递不同的父路径和子路径来组成不同的File对象,父路径是File类型,可以使用File类的方法,对父路径进行一些操作,再和子路径组成一个File对象。

示例:

private static void show03() {
    File parent = new File("e:\\");
    String child = "a.txt";

    File file = new File(parent,child);
    System.out.println(file);//e:\a.txt
}

成员方法

获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。

一、public String getAbsolutePath() :返回此File的绝对路径名字符串。

作用:获取构造方法中传递路径的绝对路径,无论构造方法中传递的是相对路径还是绝对路径,此方法返回的都是绝对路径

示例:

private static void show01() {
    File f1 = new File("d:\\1.txt");
    System.out.println(f1.getAbsolutePath());//d:\1.txt

    File f2 = new File("1.txt");
    System.out.println(f2.getAbsolutePath());//D:\Program Files\IDEA Projects\EmploymentClass\1.txt

}

二、public String getPath() :将此File转换为路径名字符串。
作用:获取构造方法中传递的路径

注意:File类重写了Object类的toString方法,toString方法就是getPath方法

public String toString() {
    return this.getPath();
}

示例:

private static void show02() {
    File f1 = new File("d:\\1.txt");
    System.out.println(f1.getPath());//d:\1.txt
    System.out.println(f1.toString());

    File f2 = new File("1.txt");
    System.out.println(f2.getPath());//1.txt

}

三、public String getName() :返回由此File表示的文件或目录的名称。
作用:获取构造方法中传递路径的文件/文件夹的名称(路径末尾的部分)

示例:

private static void show03() {
    File f1 = new File("d:\\1.txt");
    System.out.println(f1.getName());//1.txt

    File f2 = new File("abc\\ccc");
    System.out.println(f2.getName());//ccc
}

四、public long length() :返回由此File表示的文件的长度。
作用:获取构造方法中传递路径指向文件的大小,单位是字节。

注意:

  1. 文件夹没有大小
  2. 构造方法中指定的路径不存在,返回0
private static void show04() {
    File f1 = new File("a.txt");
    System.out.println(f1.length());//0

    File f2 = new File("EmploymentClass.iml");//433字节
    System.out.println(f2.length());

    File f3 = new File("day09");//0
    System.out.println(f3.length());
}

判断功能的方法

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

一、public boolean exists() :此File表示的文件或目录是否实际存在。
作用:判断构造方法中传递的路径是否为真
返回值:boolean,路径存在返回true,路径不存在返回false

示例:

private static void show01() {
    File f1 = new File("d:\\1.txt");
    System.out.println(f1.exists());//false

    File f2 = new File("EmploymentClass.iml");
    System.out.println(f2.exists());//true
}

二、
public boolean isDirectory() :此File表示的是否为目录。
作用:判断构造方法中的路径是否以文件夹结尾
public boolean isFile() :此File表示的是否为文件。
作用:判断构造方法中的路径是否以文件结尾
注意:
1. 两个方法的使用前提,都是这个路径必须存在,否则都会返回false
2. 计算机中除了文件就是文件夹,所以两个方法互斥

示例:

private static void show02() {
    File f1 = new File("EmploymentClass.iml");
    System.out.println(f1.isDirectory());//false
    System.out.println(f1.isFile());//true

    File f2= new File("day01");
    System.out.println(f2.isDirectory());//true
    System.out.println(f2.isFile());//false
    //路径不存在
    File f3= new File("day100");
    System.out.println(f3.isDirectory());//false
    System.out.println(f3.isFile());//false
}

创建删除功能的方法

  • public boolean createNewFile() :创建一个新的空文件,创建文件的路径和名称在构造方法中给出。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
  • public boolean delete() :删除由此File表示的文件或目录。

一、public boolean createNewFile() :创建一个新的空文件,创建文件的路径和名称在构造方法中给出。
返回值:boolean

  • 文件不存在,创建文件,返回true
  • 文件存在,不创建文件,返回false

注意:

  1. 此方法只能创建文件,不能创建文件夹
  2. 创建文件的路径不存在,会抛出异常java.io.IOException: 系统找不到指定的路径。
  3. createNewFile()申明抛出了异常,需要处理这个异常
    public boolean createNewFile() throws IOException
  4. win10系统没有在c盘根目录创建文件的权限
  5. 若创建的文件路径为: “day09//新建文件夹”,则会创建一个名为"新建文件夹"的文件,而不是文件夹。

示例:

private static void show01() throws IOException {
        File f1 = new File("day09\\a.txt");
        boolean b1 = f1.createNewFile();
        System.out.println("b1:"+b1);

//        File f2 = new File("w:\\b.txt");//java.io.IOException: 系统找不到指定的路径。
//        boolean b2 = f2.createNewFile();
//        System.out.println("b2:"+b2);

//        File f3 = new File("c:\\b.txt");//java.io.IOException: 拒绝访问。win10系统没有在c根目录新建文件的权限
//        boolean b3 = f3.createNewFile();
//        System.out.println("b3:"+b3);

        File f4 = new File("day09//新建文件夹");//新建的文件的名称叫"新建文件夹",看类型不看名称
        System.out.println(f4.createNewFile());//true
    }

二、
public boolean mkdir() :只能创建单极文件夹
public boolean mkdirs() :既能创建单极文件夹,又能创建多级文件夹
创建文件夹的路径和名称在构造方法中给出。

返回值:boolean
文件夹不存在,创建文件夹,返回true
文件夹存在,不创建文件夹,返回false;构造方法中的路径不存在返回false

注意:

  1. 此方法只能创建文件夹,不能创建文件。
  2. 构造方法中的路径不存在,不会抛出异常,boolean值返回false。
  3. 若创建文件夹的路径为:“day09\b.txt”,则会创建一个名为"b.txt"的文件夹,而不是文件。

示例:

private static void show02() {
    File f1 = new File("day09/abc");
    boolean b1 = f1.mkdir();
    System.out.println("b1:"+b1);

    File f2 = new File("w:\\aaa");
    System.out.println(f2.mkdir());//false

    File f3 = new File("day09\\111\\222\\333\\444");
    System.out.println(f3.mkdir());//false
    System.out.println(f3.mkdirs());

    File f4 = new File("day09\\b.txt");//创建文件夹的名称叫"b.txt"
    System.out.println(f4.mkdirs());


}

三、public boolean delete() :删除由此File表示的文件或目录。
作用:可以删除文件或文件夹,删除文件/文件夹的路径在构造方法中给出

返回值:boolean
文件/文件夹存在,删除成功,返回true
文件/文件夹不存在,返回false
文件夹不为空,返回false

注意:

  1. delete方法,删除的时候,不走回收站,直接在硬盘删除,需要谨慎!
  2. 当文件夹中还有文件或文件夹时,无法进行删除,需要进行遍历,从最底层的文件夹开始删除。

示例:

private static void show03() {
    File f1 = new File("day09//新建文件夹");
    System.out.println(f1.delete());

    File f2 = new File("day09\\b.txt");
    System.out.println(f2.delete());
    //删不了
    File f3 = new File("day09\\111");
    System.out.println(f3.delete());//false

}

目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

注意:

  1. 遍历文件夹的路径在构造方法中给出
  2. 只能遍历文件夹,不能遍历文件,遍历文件会抛出空指针异常
  3. 遍历文件夹的路径必须存在,否则会抛出空指针异常

一、public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
作用:遍历构造方法中给出的文件夹,获取文件夹中每一个文件/子文件夹的名称,把多个名称存储到一个String类型的数组中返回。

注意:

  1. 不会遍历子文件夹
  2. 隐藏文件夹或文件也可以被遍历

示例:

private static void show01() {
    File file = new File("day09");
    String[] arr = file.list();
    for (String name : arr) {
        System.out.println(name);
    }
}

二、public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
作用:遍历构造方法中给出的文件夹,获取文件夹中每一个文件/子文件夹,把文件/子文件夹封装为File对象,多个File对象,存储到一个File数组中返回。

示例:

private static void show02() {
    File file = new File("day09");
    File[] files = file.listFiles();
    for (File f : files) {
        System.out.println(f);
    }
}
发布了36 篇原创文章 · 获赞 44 · 访问量 6708

猜你喜欢

转载自blog.csdn.net/Sakuraaaaaaa/article/details/104309912