Skip to content


一、什么是文件

简单来说,文件就是用来保存数据的地方,比如大家经常使用的 word 文档,txt 文档, excel 文件...都是文件,它既可以保存一张图片,也可以保存视频,声音...

二、文件流

文件在程序中是以流的形式来操作的

  1. 基本概念介绍
  • 流:数据在数据源 (文件) 和程序 (内存) 之间经历的路径
  • 输入流:数据从数据源 (文件) 到程序 (内存) 的路径
  • 输出流:数据从程序 (内存) 到数据源 (文件) 的路径
  1. 关系图如下

alt text

三、文件的基本操作

File 类的关系图

alt text

1. 文件的创建

(1)提供三类构造器

  • new File(String pathname) //根据路径构建一个 File 对象
  • new File(File parent,String child) //根据父目录文件+子路径构建
  • new File(String parent,String child) //根据父目录+子路径构建

(2)创建文件的操作:调用 createNewFile() 方法通过路径直接指定文件创建的位置

(3)注意点

  • 路径写法
    • 系统中的文件路径:"D:\develop"
    • 程序中的文件路径:"D:\develop"(需要加上转义符
  • createNewFile() 方法会抛出异常需要捕获或者抛出

第一类构造器

根据路径构建一个 File 对象:new File(String pathname)

说明:一步到位型,直接指定文件名和文件所在的路径

java
public class newFile {
    public static void main(String[] args) {
        String pathname = "C:\\Users\\jackson\\Desktop\\file.txt";
        File file = new File(pathname);
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

第二类构造器

根据父目录文件+子路构建:new File(File parent,String child)

如何理解?
相当于把第一类构造器中的方法拆分为两个步骤,这样可以更显然的指定文件名称,体现文件的层级关系

说明:这里制定了父类文件作为路径创建子文件,这样更安全

java
public class newFile {
    public static void main(String[] args) {
        File parentFile = new File("C:\\Users\\jackson\\Desktop"); // 创建父类文件对象
        String filename = "file.txt"; // 指定创建文件的名称
        File file = new File(parentFile, filename);
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

第三类构造器

根据父目录+子路径构建:new File(String parent,String child)

说明:父类目录、子类文件都可以通过字符串指定,更灵活而且结构也更加清晰

java
public class newFile {
    public static void main(String[] args) {
        String parentPath = "C:\\Users\\jackson\\Desktop"; // 创建父类文件对象
        String filePath = "file.txt"; // 指定创建文件的名称
        File file = new File(parentPath, filePath);
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 文件的常用方法

注意:文件的大小是按字节计算的

方法描述
getName返回文件或目录的名称。
getAbsolutePath返回文件或目录的绝对路径。
getParent返回文件或目录的父目录。
length返回文件的长度(大小)。
exists检查文件或目录是否存在。
isFile检查路径是否为文件。
isDirectory检查路径是否为目录。
java
public class newFile {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\jackson\\Desktop\\file.txt");
        System.out.println("文件的名称:" + file.getName());
        System.out.println("文件的绝对路径:" + file.getAbsolutePath());
        System.out.println("文件的父目录:" + file.getParent());
        System.out.println("文件的长度:" + file.length());
        System.out.println("文件的是否存在:" + file.exists());
        System.out.println("是否为文件:" + file.isFile());
        System.out.println("是否为目录:" + file.isDirectory());
    }
}

输出如下

java
文件的名称:file.txt
文件的绝对路径:C:\Users\jackson\Desktop\file.txt
文件的父目录:C:\Users\jackson\Desktop
文件的长度:0
文件的是否存在:true
是否为文件:true
是否为目录:false

3.目录的操作

注意:在 Java 中,目录是一种特殊的文件

(1)创建一级目录


调用方法:mkdir()
java
public class newFile {
    public static void main(String[] args) {
        String parentPath= "C:\\Users\\jackson\\Desktop";
        String directory = "Java";
        File file = new File(parentPath, directory);
        file.mkdir();
        System.out.println("是为目录:" + file.isDirectory());
        System.out.println("文件路径:" + file.getAbsolutePath());
    }
}

输出

java
是为目录:true
文件路径:C:\Users\jackson\Desktop\Java

(2)创建多级目录


调用方法:mkdirs()
java
public class newFile {
    public static void main(String[] args) {
        // 首先创建一级目录
        String parentPath= "C:\\Users\\jackson\\Desktop";
        String directory = "Java";
        File file = new File(parentPath, directory);
        file.mkdir();

        // 创建多级目录
        String directorys = "a\\b\\c";
        File file1 = new File(file, directorys);
        file1.mkdirs();
    }
}

目录关系图如下

java
Java
├── a
│   └── b
│       └── c

(3)目录的删除

调用方法:delete()
注意:目录的删除操作针对的是空目录,如果目录下有文件或者其他文件,需要先删除,否则会删除失败
java
public class newFile {
    public static void main(String[] args) {
        String filePath = "C:\\Users\\jackson\\Desktop\\Java\\";
        File file = new File(filePath);
        if(file.exists()){
            if (file.delete()) {
                System.out.println("文件删除成功");
            }
        }
    }
}