java.io.File 类详解
·
方法分类总览
File 类的方法主要可以分为以下几大类:
静态方法
文件/目录检测方法
文件操作方法
目录操作方法
路径获取方法
权限检查与设置方法
1. 静态方法
这些方法直接通过类名调用,与特定的文件实例无关。
方法签名 功能描述
static File[] listRoots() |列出可用的文件系统根目录(例如,在 Windows 系统中返回 C:\, D:\ 等;在 Linux 或 macOS 中返回 /)。
2. 文件/目录检测方法
这些方法用于获取 File 对象所代表路径的基本信息。
方法签名 功能描述
boolean exists() |最重要:判断文件或目录是否实际存在。
boolean isFile() |判断是否为一个已存在的标准文件(不是目录)。
boolean isDirectory() |判断是否为一个已存在的目录。
boolean isHidden() |判断文件是否被标记为隐藏。
String getName() |返回文件或目录的名称(不包含路径)。
long length() |返回文件的长度(字节数)。如果对象是目录,返回值是未定义的。
long lastModified() |返回文件最后被修改的时间戳(自1970年1月1日以来的毫秒数)。
3. 文件操作方法
这些方法用于创建、删除、重命名文件。
方法签名 功能描述
boolean createNewFile() |原子性操作:当且仅当该名称的文件尚不存在时,创建一个新的空文件。
boolean delete() |删除文件或空目录。如果目录不为空,删除会失败。
void deleteOnExit() |请求在虚拟机终止时(程序正常退出时)删除此文件或目录。
boolean renameTo(File dest) |重命名文件或移动文件到另一个路径。注意: 此方法的行为与平台相关,且不是原子操作,使用时需谨慎。
4. 目录操作方法
这些方法用于创建、列出和遍历目录。
方法签名 |功能描述
boolean mkdir() |创建单级目录。要求父目录必须存在,否则创建失败。
boolean mkdirs() |创建多级目录。即使父目录不存在,也会一并创建,这是最常用的方法。
String[] list() |返回一个字符串数组,包含该目录下的所有文件和子目录的名称。如果 File 对象不是目录,则返回 null。
File[] listFiles() |返回一个 File 对象数组,包含该目录下的所有文件和子目录的 File 对象。
String[] list(FilenameFilter filter) |使用文件名过滤器,返回满足过滤条件的文件和子目录名称数组。
File[] listFiles(FileFilter filter) |使用文件过滤器,返回满足过滤条件的 File 对象数组。
File[] listFiles(FilenameFilter filter) |使用文件名过滤器,返回满足过滤条件的 File 对象数组。
5. 路径获取方法
这些方法用于获取文件或目录的路径信息。
方法签名 |功能描述
String getPath() |返回构造 File 对象时传入的路径字符串(可能是相对或绝对路径)。
String getAbsolutePath() |返回文件的绝对路径字符串。它不会解析符号链接或“.”、“..”等相对路径符号。
String getCanonicalPath() |返回文件的规范路径字符串。它会解析符号链接和相对路径符号,得到系统唯一的、标准的路径形式。
File getAbsoluteFile() |返回此抽象路径名的绝对路径名形式的新 File 对象。
File getCanonicalFile() |返回此抽象路径名的规范路径名形式的新 File 对象。
String getParent() |返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
File getParentFile() |返回此抽象路径名父目录的 File 对象。
6. 权限检查与设置方法
这些方法用于检查和设置文件的读写执行权限。
方法签名 功能描述
boolean canRead() |检查应用程序是否可以读取此文件。
boolean canWrite() |检查应用程序是否可以修改此文件。
boolean canExecute() |检查应用程序是否可以执行此文件。
boolean setReadable(boolean readable) |设置此文件的读权限。
boolean setWritable(boolean writable) |设置此文件的写权限。
boolean setExecutable(boolean executable) |设置此文件的执行权限。
boolean setReadOnly() |将此文件或目录标记为只读。
#完整代码示例
java
import java.io.File;
import java.io.IOException;
public class FileMethodsDemo {
public static void main(String[] args) {
// 1. 创建File对象(注意:这并不在磁盘上创建文件)
File file = new File("test.txt");
File dir = new File("my_directory");
System.out.println("=== 文件检测方法 ===");
System.out.println("文件是否存在: " + file.exists()); // false
System.out.println("是文件吗: " + file.isFile()); // false
System.out.println("是目录吗: " + file.isDirectory()); // false
System.out.println("文件名: " + file.getName()); // "test.txt"
try {
// 2. 创建文件
boolean created = file.createNewFile();
System.out.println("文件创建成功: " + created);
// 3. 创建目录
boolean dirCreated = dir.mkdir();
System.out.println("目录创建成功: " + dirCreated);
System.out.println("\n=== 创建后再次检测 ===");
System.out.println("文件是否存在: " + file.exists()); // true
System.out.println("是文件吗: " + file.isFile()); // true
System.out.println("文件大小: " + file.length() + " bytes"); // 0
// 4. 路径信息
System.out.println("\n=== 路径信息 ===");
System.out.println("相对路径: " + file.getPath());
System.out.println("绝对路径: " + file.getAbsolutePath());
System.out.println("规范路径: " + file.getCanonicalPath());
System.out.println("父目录: " + file.getParent());
// 5. 权限信息
System.out.println("\n=== 权限信息 ===");
System.out.println("可读: " + file.canRead());
System.out.println("可写: " + file.canWrite());
System.out.println("可执行: " + file.canExecute());
// 6. 列出文件系统根目录(静态方法)
System.out.println("\n=== 文件系统根目录 ===");
File[] roots = File.listRoots();
for (File root : roots) {
System.out.println("根目录: " + root);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 7. 清理:删除创建的文件和目录
if (file.exists()) {
file.delete();
}
if (dir.exists()) {
dir.delete();
}
}
}
}
#重要注意事项
路径分隔符:使用 File.separator 或 File.separatorChar 来保证跨平台兼容性,而不是直接使用 / 或 \。
list() 和 listFiles():在调用前,务必先用 isDirectory() 检查对象是否为目录,否则可能返回 null。
renameTo() 的局限性:该方法可能无法在不同磁盘或文件系统之间工作,且不是原子操作。对于复杂的文件操作,建议使用 Java NIO.2 的 Files.move()。
过时方法:在较早的 Java 版本中,File 类还有一些方法(如 toURL()),现在推荐使用 toURI() 并结合 URI 类来处理。
虽然 java.io.File 是传统的文件操作类,但在新的项目中,更推荐使用 Java 7 引入的 java.nio.file 包(特别是 Paths 和 Files 类),
它提供了更强大、更一致且更安全的文件操作 API。
更多推荐


所有评论(0)