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

Java File 类详解

Java File 类详解

File 类是 Java 中用于表示文件和目录路径名的抽象类,位于 java.io 包中。它提供了丰富的 API,用于操作文件系统,包括创建、删除、重命名、查询文件属性等功能。


1. File 类核心知识点

(1)构造方法

File 类提供了多种构造方法,用于表示文件或目录路径:

java

// 1. 通过路径字符串创建
File file1 = new File("C:/test/file.txt");// 2. 通过父路径 + 子路径创建
File file2 = new File("C:/test", "file.txt");// 3. 通过父 File 对象 + 子路径创建
File parentDir = new File("C:/test");
File file3 = new File(parentDir, "file.txt");

(2)路径表示方式

  • 绝对路径:完整路径(如 C:/test/file.txt)。

  • 相对路径:相对于当前工作目录(如 ./file.txt)。

  • 路径分隔符

    • Windows:\(需转义为 \\)或 /

    • Linux/Mac:/(推荐使用 /,Java 会自动适配)。


2. 核心方法

(1)文件/目录基本操作

方法说明
boolean createNewFile()创建新文件(仅当文件不存在时)
boolean mkdir()创建单级目录
boolean mkdirs()创建多级目录
boolean delete()删除文件或空目录
boolean renameTo(File dest)重命名或移动文件

示例

java

File file = new File("test.txt");
if (!file.exists()) {file.createNewFile();  // 创建文件
}File dir = new File("mydir");
dir.mkdir();  // 创建目录

(2)文件属性查询

方法说明
boolean exists()判断文件/目录是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
long length()获取文件大小(字节)
long lastModified()获取最后修改时间(毫秒时间戳)
String getName()获取文件名
String getPath()获取相对路径
String getAbsolutePath()获取绝对路径

示例

java

File file = new File("test.txt");
System.out.println("文件大小:" + file.length() + " bytes");
System.out.println("最后修改时间:" + new Date(file.lastModified()));

(3)目录遍历

方法说明
String[] list()返回目录下的文件名数组
File[] listFiles()返回目录下的 File 对象数组
File[] listFiles(FileFilter filter)过滤符合条件的文件

示例

java

File dir = new File("C:/test");
// 遍历所有文件
for (File file : dir.listFiles()) {System.out.println(file.getName());
}// 仅遍历 .txt 文件
File[] txtFiles = dir.listFiles((file) -> file.getName().endsWith(".txt"));

3. 关键问题与解决方案

(1)路径问题

  • 问题:Windows 和 Linux 路径分隔符不同。

  • 解决:使用 File.separator(跨平台兼容):

    java

    String path = "data" + File.separator + "file.txt";
    File file = new File(path);

(2)文件删除失败

  • 原因

    • 文件被占用(如未关闭 InputStream)。

    • 目录非空(delete() 只能删空目录)。

  • 解决

    java

    // 递归删除非空目录
    public static void deleteDir(File dir) {if (dir.isDirectory()) {for (File file : dir.listFiles()) {deleteDir(file);}}dir.delete();
    }

(3)文件权限问题

  • 检查权限

    java

    File file = new File("test.txt");
    System.out.println("可读:" + file.canRead());
    System.out.println("可写:" + file.canWrite());
    System.out.println("可执行:" + file.canExecute());

4. 对比 File 与 Path(NIO.2)

特性File(传统 IO)Path(NIO.2)
所属包java.iojava.nio.file
功能基础文件操作更强大(符号链接、文件属性)
性能较低更高
推荐场景旧代码兼容新项目优先使用

示例(NIO.2 替代方案)

java

Path path = Paths.get("test.txt");
Files.createFile(path);  // 创建文件
Files.delete(path);     // 删除文件

5. 记忆技巧

(1)核心方法分类

文件操作:createNewFile(), delete(), renameTo()
目录操作:mkdir(), mkdirs(), listFiles()
属性查询:exists(), isFile(), length()

(2)常见操作流程

"先查 exists(),再判 isFile()
创建用 createNewFile(),删除要 delete()
目录遍历 listFiles(),递归删除要记牢!"


6. 面试常见问题

  1. File 类能直接读写文件内容吗?

    • 不能,它只操作元数据,需配合 FileInputStream/FileWriter

  2. 如何递归遍历目录?

    • 用 listFiles() + 递归(见上文示例)。

  3. mkdir() 和 mkdirs() 的区别?

    • mkdir() 只能创建单级目录,mkdirs() 可创建多级。


7. 实战应用

  • 文件管理工具:批量重命名、删除过期文件。

  • 日志清理:定期删除旧日志文件。

  • 配置文件读取:检查文件是否存在后加载。

练习

  1. 写一个程序,统计某个目录下所有 .java 文件的总行数。

  2. 实现一个递归复制目录的功能(使用 File 或 NIO.2)。

http://www.xdnf.cn/news/694.html

相关文章:

  • 从事计算机视觉需要掌握哪些知识
  • 微信小程序通过mqtt控制esp32
  • Map遍历
  • Linux 进程概念补充 (自用)
  • 【数据结构】红黑树
  • 2181、合并零之间的节点
  • 右起第2个LED灯的闪烁(STC89C52单片机)
  • HTTP 1.0 和 2.0 的区别
  • (done) 吴恩达版提示词工程 1. 引言 (Base LLM 和 Instruction Tuned LLM)
  • ESP32开发之任务创建
  • 用P0口实现流水灯效果(STC89C52单片机)
  • JavaScript解密实战指南:从基础到进阶技巧
  • 硬件电路(24)-NE555振荡电路
  • 六、小白如何用Pygame制作一款跑酷类游戏(静态障碍物和金币的添加)
  • c++通讯录管理系统
  • 运筹学之引力搜索
  • Mac上Cursor无法安装插件解决方法
  • 【KWDB 创作者计划】_上位机知识篇---ESP32-S3Arduino
  • Aerich实战指南:零基础掌握异步ORM数据库迁移工具
  • Linux `init 6` 相关命令的完整使用指南
  • Android Gradle多渠道打包
  • 【自然语言处理与大模型】Linux环境下Ollama下载太慢了该怎么处理?
  • AIStarter新版本发布:模型、插件与工作流的高效管理工具
  • 【C++初阶】第15课—模版进阶
  • 多模态大语言模型arxiv论文略读(三十)
  • 设计心得——函数参数的封装
  • Redis缓存降级的4种策略
  • QT实现串口透传的功能
  • OSPF综合实验——企业边界路由器、LSA收敛
  • 车载测试用例开发-如何平衡用例覆盖度和测试效率的方法论