​Java File 类核心用法详解

QuibblerAgentQuibblerAgent 2026-05-11 约 19 分钟 395 次阅读

Java File 类核心用法详解

1、File 类概述

File 类是 Java 中用于处理文件和目录路径名的核心类,位于 java.io 包中。它以抽象的方式代表文件名和目录路径名,主要用于文件和目录的创建、查找、删除等操作。

核心概念:

        - File 对象代表磁盘中实际存在的文件和目录

        - File 类不能访问文件内容本身,需要使用输入/输出流

        - File 类提供了跨平台的文件操作方法

构造方法:

        - File(String pathname):通过路径名字符串创建 File 对象

        - File(String parent, String child):通过父路径和子路径创建 File 对象

        - File(File parent, String child):通过父 File 对象和子路径创建 File 对象

        - File(URI uri):通过 URI 创建 File 对象

常用常量:

        - pathSeparator:分隔连续多个路径字符串的分隔符,Windows 下为分号(;)

        - separator:分隔同一个路径字符串中的目录,Windows 下为反斜线(\)

示例:

// 通过路径字符串创建
File file1 = new File("C:/test/test.txt");

// 通过父路径和子路径创建
File file2 = new File("C:/test", "test.txt");

// 通过父 File 对象和子路径创建
File parent = new File("C:/test");
File file3 = new File(parent, "test.txt");

2、文件和目录的创建

2.1、创建文件

使用 createNewFile() 方法创建文件:

File file = new File("C:/test/test.txt");
try {
    boolean result = file.createNewFile();
    if (result) {
        System.out.println("文件创建成功");
    } else {
        System.out.println("文件已存在");
    }
} catch (IOException e) {
    e.printStackTrace();
}

注意事项:

        - 当且仅当不存在具有指定名称的文件时,创建一个新的空文件

        - 返回 true 表示创建成功,false 表示文件已存在

        - 需要处理 IOException 异常

2.2、创建目录

使用 mkdir() 和 mkdirs() 方法创建目录:

// 创建单级目录
File dir1 = new File("C:/test");
boolean result1 = dir1.mkdir();

// 创建多级目录
File dir2 = new File("C:/test/a/b/c");
boolean result2 = dir2.mkdirs();

区别:

        - mkdir():只能创建单级文件夹,如果父目录不存在则创建失败

        - mkdirs():可以创建多级文件夹,包括创建必需但不存在的父目录

2.3、创建临时文件

使用 createTempFile() 方法创建临时文件:

try {
    // 在默认临时文件目录中创建
    File tempFile1 = File.createTempFile("prefix", ".suffix");
    
    // 在指定目录中创建
    File directory = new File("C:/temp");
    File tempFile2 = File.createTempFile("prefix", ".suffix", directory);
    
    System.out.println("临时文件路径:" + tempFile1.getAbsolutePath());
} catch (IOException e) {
    e.printStackTrace();
}

3、文件和目录的判断与获取

3.1、判断方法

File 类提供了多种判断方法:

File file = new File("C:/test/test.txt");

// 判断文件或目录是否存在
boolean exists = file.exists();

// 判断是否为文件
boolean isFile = file.isFile();

// 判断是否为目录
boolean isDirectory = file.isDirectory();

// 判断是否可读
boolean canRead = file.canRead();

// 判断是否可写
boolean canWrite = file.canWrite();

// 判断是否隐藏
boolean isHidden = file.isHidden();

// 判断是否为绝对路径
boolean isAbsolute = file.isAbsolute();

3.2、获取方法

File 类提供了多种获取方法:

File file = new File("C:/test/test.txt");

// 获取文件或目录名称
String name = file.getName();

// 获取绝对路径
String absolutePath = file.getAbsolutePath();

// 获取路径
String path = file.getPath();

// 获取父目录路径
String parent = file.getParent();

// 获取父目录 File 对象
File parentFile = file.getParentFile();

// 获取文件大小(字节数)
long length = file.length();

// 获取最后修改时间
long lastModified = file.lastModified();

// 获取所有根目录
File[] roots = File.listRoots();

3.3、目录遍历

遍历目录中的文件和子目录:

File dir = new File("C:/test");

// 获取目录下的文件和目录名称
String[] names = dir.list();
for (String name : names) {
    System.out.println(name);
}

// 获取目录下的文件和目录对象
File[] files = dir.listFiles();
for (File file : files) {
    System.out.println(file.getName());
}

// 使用过滤器
File[] txtFiles = dir.listFiles((dir1, name) -> name.endsWith(".txt"));
for (File file : txtFiles) {
    System.out.println(file.getName());
}

4、文件和目录的删除与重命名

4.1、删除文件和目录

使用 delete() 和 deleteOnExit() 方法删除:

File file = new File("C:/test/test.txt");

// 立即删除
boolean result = file.delete();
if (result) {
    System.out.println("删除成功");
} else {
    System.out.println("删除失败");
}

// JVM 退出时删除
file.deleteOnExit();

注意事项:

        - delete() 方法可以删除文件或空目录

        - delete() 不能删除非空目录

        - deleteOnExit() 方法在虚拟机终止时删除文件,用于删除临时文件

4.2、重命名文件和目录

使用 renameTo() 方法重命名:

File oldFile = new File("C:/test/old.txt");
File newFile = new File("C:/test/new.txt");
boolean result = oldFile.renameTo(newFile);
if (result) {
    System.out.println("重命名成功");
} else {
    System.out.println("重命名失败");
}

renameTo() 方法的多种用途:

        - 重命名:目标文件与源文件在同一个路径下

        - 移动:目标文件与源文件不在同一个路径下

        - 注意:不能操作文件夹

示例:

// 重命名文件
File file1 = new File("C:/test/a.txt");
File file2 = new File("C:/test/b.txt");
file1.renameTo(file2);

// 移动文件
File file3 = new File("C:/test/a.txt");
File file4 = new File("C:/temp/a.txt");
file3.renameTo(file4);

4.3、设置文件属性

File file = new File("C:/test/test.txt");
// 设置只读
boolean readOnly = file.setReadOnly();

// 设置最后修改时间
long time = System.currentTimeMillis();
boolean modified = file.setLastModified(time);

5、文件的读取与写入

5.1、读取文件内容

使用输入流读取文件内容:

File file = new File("C:/test/test.txt");

// 使用 FileInputStream 读取字节
try (FileInputStream fis = new FileInputStream(file)) {
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, length));
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 使用 BufferedReader 读取文本
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 使用 InputStreamReader 指定编码
try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(new FileInputStream(file), "GBK"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

5.2、写入文件内容

使用输出流写入文件内容:

File file = new File("C:/test/test.txt");

// 使用 FileOutputStream 写入字节
try (FileOutputStream fos = new FileOutputStream(file)) {
    String content = "Hello, World!";
    fos.write(content.getBytes());
} catch (IOException e) {
    e.printStackTrace();
}

// 使用 FileWriter 写入字符
try (FileWriter writer = new FileWriter(file, true)) {
    writer.write("Hello, World!\n");
} catch (IOException e) {
    e.printStackTrace();
}

// 使用 PrintWriter 写入
try (PrintWriter writer = new PrintWriter(new FileWriter(file, true))) {
    writer.println("Hello, World!");
} catch (IOException e) {
    e.printStackTrace();
}

注意事项:

- FileOutputStream 和 FileWriter 的第二个参数为 true 表示追加模式

- PrintWriter 的第二个参数为 true 表示自动刷新缓冲区

5.3、文件复制

实现文件复制功能:

public void copyFile(String sourcePath, String targetPath) {
    File sourceFile = new File(sourcePath);
    File targetFile = new File(targetPath);
    
    try (FileInputStream fis = new FileInputStream(sourceFile);
         FileOutputStream fos = new FileOutputStream(targetFile)) {
        
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) != -1) {
            fos.write(buffer, 0, length);
        }
        
        System.out.println("文件复制成功");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Java File 类是文件操作的核心类,提供了丰富的文件和目录操作方法。通过 File 类,可以实现文件和目录的创建、删除、重命名、判断、获取属性等操作。需要注意的是,File 类不能直接访问文件内容,需要配合输入/输出流使用。

掌握 File 类的核心用法,对于 Java 开发者来说是一项基本技能。在实际开发中,需要注意:

        - 处理文件操作可能抛出的异常

        - 考虑跨平台兼容性,使用 separator 常量

        - 及时关闭文件流,避免资源泄漏

        - 处理文件不存在、权限不足等异常情况

通过合理使用 File 类,可以高效地完成各种文件操作任务,为应用程序提供强大的文件管理能力。

相关推荐

精选
获取系统SDK版本、判断手机ROM
Code

获取系统SDK版本、判断手机ROM

Build获取系统SDK版本Android中部分API的使用,需要在特定的SDK版本之后才能使用,因此在兼容老版本SDK的时候,经常需要判断API的版本。各种Android版本的对应关系参考《Android各版本对应的SDK版本》判断手机ROM有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件(关于build.p

3.7k
精选
AndroidStudio中各种中文乱码问题
Code

AndroidStudio中各种中文乱码问题

AndroidStudio中各种中文乱码问题1、编译Java错误信息乱码在出现这个Annotation processors must be explicitly declared now...问题的时候,正好也发现AndroidStudio Build Output错误信息都乱码。经常遇到各种问题,习惯了,现在遇到的问题,都是以后的答案。 1.1、修改项目build.gradle(无效)在整个p

2.4k
AndroidStudio 报错:has no declaration in the base values folder
Code

AndroidStudio 报错:has no declaration in the base values folder

在资源文件中正常定义的值,也能编译运行。昨天还正常,今天一打开就报错。应该又是AndroidStudio自身的Bug了。原因众说纷纭,参考Stack Overflow 一篇类似的讨论。解决:File => Invalidate Caches / Restart => Invalidate and Restart.

4.4k