Java 中的 File 类详解

在 Java 中,File 类是用于与文件和目录进行交互的核心类。通过 File 类,你可以进行文件的创建、删除、重命名、路径获取等操作。File 类并不直接用于文件内容的读写,而是用来表示文件和目录的路径,它允许你对文件系统进行操作。

File 类位于 java.io 包下。


1. File 类的基本构造函数

File 类有多个构造方法,主要有以下几种:

1.1 使用文件路径创建 File 对象

1
File file = new File("path/to/file.txt");
  • 解释:通过指定文件的路径(可以是绝对路径或相对路径)来创建 File 对象。

1.2 使用文件路径和父目录创建 File 对象

1
File file = new File("path/to", "file.txt");
  • 解释:第一个参数是父目录路径,第二个参数是文件名。

1.3 使用 URI 创建 File 对象

1
File file = new File(new URI("file:///path/to/file.txt"));
  • 解释:通过 URI 创建 File 对象。

2. File 类的常用方法

2.1 获取文件或目录的路径

  • getAbsolutePath():返回文件或目录的绝对路径。
1
2
File file = new File("file.txt");
System.out.println(file.getAbsolutePath()); // 输出:C:\Users\user\file.txt
  • getCanonicalPath():返回文件的规范路径。与 getAbsolutePath() 的区别在于,它会去除多余的路径(如 ...)。
1
2
File file = new File("file.txt");
System.out.println(file.getCanonicalPath()); // 输出:C:\Users\user\file.txt
  • getName():返回文件的名称。
1
System.out.println(file.getName()); // 输出:file.txt
  • getParent():返回文件的父目录路径。
1
System.out.println(file.getParent()); // 输出:C:\Users\user

2.2 文件存在性检查

  • exists():判断文件或目录是否存在。
1
2
File file = new File("file.txt");
System.out.println(file.exists()); // 如果文件存在,返回 true
  • isFile():判断是否是一个文件。
1
System.out.println(file.isFile()); // 如果是文件,返回 true
  • isDirectory():判断是否是一个目录。
1
2
File dir = new File("path/to/dir");
System.out.println(dir.isDirectory()); // 如果是目录,返回 true
  • canRead():检查是否可读。
1
System.out.println(file.canRead()); // 如果文件可读,返回 true
  • canWrite():检查是否可写。
1
System.out.println(file.canWrite()); // 如果文件可写,返回 true
  • canExecute():检查文件是否可执行。
1
System.out.println(file.canExecute()); // 如果文件可执行,返回 true

2.3 文件/目录操作

  • createNewFile():创建一个新文件。如果文件已经存在,返回 false
1
2
3
4
5
6
File file = new File("newfile.txt");
if (file.createNewFile()) {
System.out.println("文件创建成功!");
} else {
System.out.println("文件已存在!");
}
  • mkdir():创建一个单一的目录。如果目录已存在,返回 false
1
2
3
4
5
6
File dir = new File("newdir");
if (dir.mkdir()) {
System.out.println("目录创建成功!");
} else {
System.out.println("目录已存在!");
}
  • mkdirs():创建目录及其所有必要的父目录。
1
2
3
4
5
6
File dir = new File("parent/newdir");
if (dir.mkdirs()) {
System.out.println("目录创建成功!");
} else {
System.out.println("目录已存在!");
}
  • delete():删除文件或目录。若是目录,则必须为空才能删除。
1
2
3
4
5
6
File file = new File("file.txt");
if (file.delete()) {
System.out.println("文件删除成功!");
} else {
System.out.println("文件删除失败!");
}
  • renameTo(File dest):将文件或目录重命名或移动到另一个路径。
1
2
3
4
5
6
7
File oldFile = new File("oldfile.txt");
File newFile = new File("newfile.txt");
if (oldFile.renameTo(newFile)) {
System.out.println("文件重命名成功!");
} else {
System.out.println("文件重命名失败!");
}

2.4 获取文件信息

  • length():返回文件的大小(以字节为单位)。
1
System.out.println(file.length()); // 输出:文件的字节大小
  • lastModified():返回文件最后修改的时间(以毫秒为单位)。
1
System.out.println(file.lastModified()); // 输出:最后修改时间(时间戳)
  • list():列出目录中所有文件和目录的名称。
1
2
3
4
5
File dir = new File("path/to/dir");
String[] files = dir.list();
for (String file : files) {
System.out.println(file);
}
  • listFiles():列出目录中的所有文件和目录,返回 File 数组。
1
2
3
4
5
File dir = new File("path/to/dir");
File[] files = dir.listFiles();
for (File f : files) {
System.out.println(f.getName());
}

2.5 判断文件权限

  • setReadable(boolean readable):设置文件是否可读。
  • setWritable(boolean writable):设置文件是否可写。
  • setExecutable(boolean executable):设置文件是否可执行。
1
2
3
file.setReadable(true); // 设置文件为可读
file.setWritable(true); // 设置文件为可写
file.setExecutable(true); // 设置文件为可执行

3. File 类与其他 I/O 类的区别

File 类主要用于对文件系统进行操作(如创建、删除、查询文件),而对于文件内容的读取和写入,我们通常使用其他 I/O 类,如 FileInputStreamFileOutputStreamBufferedReaderBufferedWriter 等。


4. 总结

  • File 用于操作文件和目录,但不处理文件的内容。
  • 通过 File 类,可以检查文件的存在性、获取文件信息、创建文件/目录、删除文件、重命名文件等。
  • File 类操作通常涉及与文件系统进行交互,因此它是 java.io 中最基本的类之一。
  • 文件内容的读写需要结合使用其他 I/O 类,如 FileInputStreamFileOutputStream 等。