当前位置: 首页 > news >正文

Java File 类

File 类是 Java 中用于处理文件和目录的基本类之一,位于 java.io 包中。它提供了多种方法来创建、删除、检查、修改文件或目录的属性,以及列出文件夹中的内容。虽然 File 类本身不提供直接的读取或写入文件内容的方法(这些操作通常由 FileInputStream, FileOutputStream, BufferedReader, BufferedWriter 等类来完成),但它为文件和目录的操作提供了强大的功能。

1. File 类的构造方法

File 类的主要构造方法有:

  • File(String pathname): 根据文件或目录的路径创建 File 对象。
File file = new File("example.txt");
  • File(String parent, String child): 根据父路径和子路径创建 File 对象。
File file = new File("C:/Documents", "example.txt");
  • File(File parent, String child): 根据父 File 对象和子路径创建 File 对象。
File parentDir = new File("C:/Documents");
File file = new File(parentDir, "example.txt");

2. 文件和目录的创建与删除

  • boolean createNewFile():

如果文件不存在,则创建该文件,若文件已经存在,则不会覆盖它。返回 true 表示文件创建成功,返回 false 表示文件已经存在。

File file = new File("example.txt");
if (file.createNewFile()) {
    System.out.println("文件创建成功");
} else {
    System.out.println("文件已存在");
}
  • boolean mkdir():

创建单一目录。如果目录已经存在,则返回 false,如果创建成功则返回 true。

File dir = new File("newDirectory");
if (dir.mkdir()) {
    System.out.println("目录创建成功");
} else {
    System.out.println("目录已存在或创建失败");
}
  • boolean mkdirs():

创建多层目录,如果父目录不存在,也会一并创建。返回 true 表示成功,false 表示失败。

File dir = new File("parentDir/childDir");
if (dir.mkdirs()) {
    System.out.println("多层目录创建成功");
} else {
    System.out.println("创建失败");
}
  • boolean delete():

删除文件或目录。如果文件/目录存在并且可以删除,则返回 true,否则返回 false。需要注意,删除操作是不可恢复的。

File file = new File("example.txt");
if (file.delete()) {
    System.out.println("文件删除成功");
} else {
    System.out.println("文件删除失败");
}

3 文件和目录的属性检查

  • boolean exists():

检查文件或目录是否存在。

if (file.exists()) {
    System.out.println("文件或目录存在");
} else {
    System.out.println("文件或目录不存在");
}

  • boolean isDirectory():

检查 File 对象是否表示目录。如果是目录返回 true,否则返回 false。

if (file.isDirectory()) {
    System.out.println("这是一个目录");
}
  • boolean isFile():

检查 File 对象是否表示文件。如果是文件返回 true,否则返回 false。

if (file.isFile()) {
    System.out.println("这是一个文件");
}
  • String getName(): 获取文件或目录的名称。
String name = file.getName();
System.out.println("文件名: " + name);
  • String getPath(): 获取文件或目录的路径。
String path = file.getPath();
System.out.println("路径: " + path);
  • long length(): 获取文件的字节数。对于目录,该方法返回 0。
long size = file.length();
System.out.println("文件大小: " + size + " 字节");

4. 文件重命名与移动

boolean renameTo(File dest): 将当前文件重命名或移动到目标路径。如果成功返回 true,否则返回 false。

File newFile = new File("newExample.txt");
if (file.renameTo(newFile)) {
    System.out.println("文件重命名成功");
} else {
    System.out.println("文件重命名失败");
}

5. 文件权限操作

  • boolean canRead(): 判断是否可以读取文件。
if (file.canRead()) {
    System.out.println("文件可读");
}
  • boolean canWrite(): 判断是否可以写入文件。
if (file.canWrite()) {
    System.out.println("文件可写");
}
  • boolean canExecute(): 判断是否可以执行文件。
if (file.canExecute()) {
    System.out.println("文件可执行");
}

6. 文件列表和目录遍历

  • String[] list(): 返回一个字符串数组,包含当前目录中的所有文件和子目录的名称。
File dir = new File("C:/Documents");
String[] files = dir.list();
if (files != null) {
    for (String filename : files) {
        System.out.println(filename);
    }
}
  • File[] listFiles(): 返回一个 File 数组,包含当前目录中的所有文件和子目录。
File dir = new File("C:/Documents");
File[] files = dir.listFiles();
if (files != null) {
    for (File f : files) {
        System.out.println(f.getName());
    }
}

7. 常见注意事项

  • 路径分隔符:在不同的操作系统中,路径分隔符可能不同。Windows 使用反斜杠(\),而 UNIX-like 系统(如 Linux 和 macOS)使用正斜杠(/)。Java 提供了 File.separator 来获取当前操作系统的路径分隔符,避免硬编码路径分隔符。
String path = "folder" + File.separator + "example.txt";
  • 相对路径与绝对路径:File 可以使用相对路径(相对于项目根目录或当前工作目录)或绝对路径(以文件系统的根目录为起点)来表示文件或目录。

8 案例

场景
我们希望创建一个程序来处理用户上传的文件。程序会:

  • 检查文件是否存在。
  • 如果不存在,则创建一个新的文件。
  • 在文件中写入一些数据。
  • 读取文件中的数据。
  • 最后删除文件。
import java.io.*;

public class FileExample {
    public static void main(String[] args) {
        // 文件路径
        File file = new File("example.txt");

        // 1. 检查文件是否存在
        if (file.exists()) {
            System.out.println("文件已存在");
        } else {
            try {
                // 2. 如果文件不存在,创建一个新的文件
                if (file.createNewFile()) {
                    System.out.println("文件创建成功");
                } else {
                    System.out.println("文件创建失败");
                }
            } catch (IOException e) {
                System.out.println("发生错误: " + e.getMessage());
            }
        }

        // 3. 向文件写入内容
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            writer.write("Hello, this is a test file.");
            writer.newLine();
            writer.write("This file was created and written by the FileExample program.");
            System.out.println("写入文件成功");
        } catch (IOException e) {
            System.out.println("写入文件时发生错误: " + e.getMessage());
        }

        // 4. 读取文件内容
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            System.out.println("读取文件内容:");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("读取文件时发生错误: " + e.getMessage());
        }

        // 5. 删除文件
        if (file.delete()) {
            System.out.println("文件删除成功");
        } else {
            System.out.println("文件删除失败");
        }
    }
}

相关文章:

  • rman 备份恢复1
  • spring日志
  • OmniParser V2 和 OmniTool 让 AI 来控制 Windows 设备
  • c语言基础第12节《函数的调用》
  • 怎么用cURL库对接智能语音播报设备
  • ShenNiusModularity项目源码学习(10:ShenNius.FileManagement项目分析)
  • Java语法-集合
  • Java——继承
  • 【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow
  • 深入解析 sudo -l 命令的输出内容
  • pdf预览在vue项目中的使用兼容ie浏览器
  • 面对STM32的庞大体系,如何避免迷失在细节中?
  • [python]windows上安装yolov12环境
  • 选好加密狗,一次说全
  • Deepseek快速做PPT
  • Go Web 项目实战:构建 RESTful API、命令行工具及应用部署
  • 用C++ Qt实现安卓电池充电动效 | 打造工业级电量控件
  • nodejs链接redis
  • webSocket
  • Python装饰器本质250220
  • A股三大股指涨跌互现,工农中三大行股价创新高
  • 养胃不是顿顿喝粥,这份“胃的使用说明书”请收好
  • 限制再放宽!新版市场准入负面清单缩减到106项
  • 山西国道塌方致55岁货车司机死亡,女儿:货车的车贷还要还
  • 专家解读上海一季度经济数据:经济韧性在增强,民企活力不可小觑
  • 上影新片《密档》杀青,全新角度演绎石库门秘战