1. 概述

  • java.io.File类:文件和文件目录的抽象表示形式,与平台无关
  • File能新建、删除、重命名文件和目录,但File不能访问文件本身。如果需要访问文件内容本身,则需要使用输入输出流
  • 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录
  • File对象可以作为参数传递给流的构造器

2. File类的使用

2.1 常用构造器

  • public File(String pathname):以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认当前路径在系统属性user.id中存储。

    • 绝对路径:是一个固定的路径,从盘符开始
    • 相对路径:是相对于某个位置开始
  • public File(String pathname, String child):以parent为父路径,child为子路径创建File对象
  • public File(File parent, String child):根据一个父File对象和自文件路径创建File对象
@Test
public void test1() {
    // 相对于当前module
    File file1 = new File("hello.txt");
    // 绝对路径
    File file2 = new File("D:\\workshop\\code_learn\\JavaSenior\\day08");
}

2.2 路径分隔符

  • 路径中的每级目录之间用一个路径分隔符隔开
  • 路径分隔符和系统有关

    • Windows和DOS系统默认使用\来表示
    • UNIX和URL使用/来表示
  • Java程序支持跨平台执行,因此路径分隔符要慎用
  • 为了解决这个隐患,File类提供了一个常量:public static final String separator。根据操作系统,动态提供分隔符。
// 使用路径分隔符
File file3 = new File("D:" + File.separator + "workshop");

2.3 常用方法

2.3.1 File类的获取功能

  • public String getAbsolutePath():获取绝对路径
  • public String getPath():获取路径
  • public String getName():获取名称
  • public String getParent():获取上层文件目录,若无,则返回null
  • public long length():获取文件长度,即字节数。目录不能获取长度
  • public long lastModified():获取最后一次修改时间,毫秒值
  • public String[] list():获取指定目录下的所有文件或者文件目录的名称数组,适用于目录
  • public File[] listFiles():获取指定目录下的所有文件或者文件目录的File数组,适用于目录
@Test
public void test2() {
    // 相对路径文件
    File file1 = new File("hello.txt");
    // 绝对路径文件
    File file2 = new File("d:\\io\\hello.txt");

    System.out.println("file1.getAbsolutePath(): " + file1.getAbsolutePath());
    System.out.println("file1.getPath(): " + file1.getPath());
    System.out.println("file1.getName(): " + file1.getName());
    System.out.println("file1.getParent(): " + file1.getParent());
    System.out.println("file1.length(): " + file1.length());
    System.out.println("file1.lastModified(): " + file1.lastModified());

    System.out.println("file2.getAbsolutePath(): " + file2.getAbsolutePath());
    System.out.println("file2.getPath(): " + file2.getPath());
    System.out.println("file2.getName(): " + file2.getName());
    System.out.println("file2.getParent(): " + file2.getParent());
    System.out.println("file2.length(): " + file2.length());
    System.out.println("file2.lastModified(): " + file2.lastModified());
}

运行结果:

file1.getAbsolutePath(): D:\workshop\code_learn\JavaSenior\day08\hello.txt
file1.getPath(): hello.txt
file1.getName(): hello.txt
file1.getParent(): null
file1.length(): 11
file1.lastModified(): 1617889602553
file2.getAbsolutePath(): d:\io\hello.txt
file2.getPath(): d:\io\hello.txt
file2.getName(): hello.txt
file2.getParent(): d:\io
file2.length(): 0
file2.lastModified(): 1617889473421
@Test
public void test3() {
    File file = new File("D:\\workshop\\code_learn\\JavaSenior\\day08");
    String[] list = file.list();
    File[] files = file.listFiles();
    for (File file1 : files) {
        System.out.println(file1.toString());
    }
    for (String s : list) {
        System.out.println(s);
    }
}

运行结果:

D:\workshop\code_learn\JavaSenior\day08\day08.iml
D:\workshop\code_learn\JavaSenior\day08\hello.txt
D:\workshop\code_learn\JavaSenior\day08\pom.xml
D:\workshop\code_learn\JavaSenior\day08\src
D:\workshop\code_learn\JavaSenior\day08\target
day08.iml
hello.txt
pom.xml
src
target

2.3.2 File类的重命名功能

  • public boolean renameTo(File dest):把文件重命名为指定的文件路径
@Test
public void test4() {
    // 相对路径文件
    File file1 = new File("hello.txt");
    File file2 = new File("helloworld.txt");
    // 要想保证返回值为true,要保证file1在硬盘上,且file2不能在硬盘中
    boolean renameTo = file1.renameTo(file2);
    System.out.println(renameTo);
}

运行结果:

true

要想保证返回值为true,要保证file1在硬盘上,且file2不能在硬盘中

2.3.3 File类的判断功能

  • public boolean isDirectory():判断是否是文件目录
  • public boolean isFile():判断是否是文件
  • public boolean exists():判断是否存在
  • public boolean canRead():判断文件是否可读
  • public boolean canWrite():判断是否可写
  • public boolean isHidden():判断是否隐藏
@Test
public void test5() {
    File file1 = new File("helloworld.txt");
    System.out.println("file1.isDirectory(): " + file1.isDirectory());
    System.out.println("file1.isFile(): " + file1.isFile());
    System.out.println("file1.exists(): " + file1.exists());
    System.out.println("file1.canRead(): " + file1.canRead());
    System.out.println("file1.canWrite(): " + file1.canWrite());
    System.out.println("file1.isHidden(): " + file1.isHidden());
}

运行结果:

file1.isDirectory(): false
file1.isFile(): true
file1.exists(): true
file1.canRead(): true
file1.canWrite(): true
file1.isHidden(): false

2.3.4 File类的创建功能

  • public boolean createNewFile():创建文件。若文件存在,则不创建,返回false
  • public boolean mkdir():创建目录,如果此目录存在,则不创建,如果此文件目录的上层目录不存在,也不创建
  • public boolean mkdirs():创建目录,如果上层文件目录不存在,一并创建
如果创建文件或者文件目录没有写盘符路径,那么默认在项目路径下

文件的创建:

@Test
public void test6() throws IOException {
    File file1 = new File("hi.txt");
    if (!file1.exists()) {
        boolean newFile = file1.createNewFile();
        if (newFile) {
            System.out.println("创建成功");
        }
    }
}

运行结果:

创建成功

目录的创建:

@Test
public void test7() {
    File file1 = new File("D:\\io\\io1");
    boolean mkdir = file1.mkdir();
    if(mkdir){
        System.out.println("io1 创建成功");
    }

    File file2 = new File("D:\\io1\\io1");
    boolean mkdir1 = file2.mkdir();
    if (mkdir1){
        System.out.println("io1/io1 创建成功");
    }

    File file3 = new File("D:\\io1\\io2");
    boolean mkdir2 = file3.mkdirs();
    if (mkdir2){
        System.out.println("io1/io2 创建成功");
    }
}

运行结果:

io1 创建成功
io1/io2 创建成功

运行前D:\io目录已经存在,D:\io1目录不存在

2.3.5 File类的删除功能

  • public boolean delete():删除文件或者文件夹
@Test
public void test8() {
    File file = new File("hi.txt");
    boolean delete = file.delete();
    if (delete) {
        System.out.println("删除成功");
    }
}

运行结果:

删除成功
最后修改:2021 年 04 月 08 日
如果觉得我的文章对你有用,请随意赞赏