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.mzph.cn/pingmian/77571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

Unity Nav Mesh导航系统的简单使用

标题 1.下载。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent组件8.Nav Mesh Obstacle组件9.简单使用 1.下载。 unity2022以上版本要去packageManager中下载。 2.面板位置 3.object面板 Navigation Static:设置该物体是否被列入静态寻路…

FairyGUI图标文字合批失败的原因

1)FairyGUI图标文字合批失败的原因 2)为什么Cubemap的内存占用超高 3)如何找到网格某个切面的中心点 4)为什么SafeZone在倒屏后方向相反 这是第428篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了…

[BUG]Cursor C++扩展不支持

本文内容组织形式 问题描述失效原因解决方案使用野版C Extension 猜你喜欢结语 问题描述 日期:20250419 操作系统: mac C代码没有办法进行跳转,并且和以前的文本标亮也不同 并且还有如下问题弹窗 C/C 扩展只能与 Microsoft Visual Studio…

深⼊理解 JVM 执⾏引擎

深⼊理解 JVM 执⾏引擎 其中前端编译是在 JVM 虚拟机之外执⾏,所以与 JVM 虚拟机没有太⼤的关系。任何编程语⾔,只要能够编译出 满⾜ JVM 规范的 Class ⽂件,就可以提交到 JVM 虚拟机执⾏。⾄于编译的过程,如果你不是想要专⻔去研…

Ubuntu 部署 DeepSeek

在 Ubuntu 系统上部署 DeepSeek 模型,能让用户利用其强大的人工智能能力,同时保障数据的安全性与操作的自主性。不过,这一过程涉及诸多技术细节,需要谨慎操作。以下将为你详细介绍在 Ubuntu 系统部署 DeepSeek 的操作步骤及注意事…

通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等

通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能…… 那么有哪些现成的 Rules 可以抄作业呢,今天我们官方输出了 Java、TypeScript、Python、Go、JavaScript 等语…

山东大学软件学院项目实训-基于大模型的模拟面试系统-Token过期重定向问题

项目结构 ├── assets/ # 静态资源(CSS/图片) ├── components/ # Vue 组件 ├── layouts/ # 布局模板 ├── pages/ # 自动生成路由 ├── plugins/ # 插件(如 axios 拦截器) …

SAP案例:珠海汉胜科技SAP S/4 HANA智能制造实践与价值实现

客户简介 珠海汉胜科技股份有限公司为高科技生产企业,成立于1985年,拥有员工近2000人。主要从事生产、销售、研发:光纤光缆、电线、电缆及附件、铝塑复合管;光纤光缆、电缆、电线生产项目的策划及技术咨询。它致力于为国内外无线电…

Spring Boot 项目中发布流式接口支持实时数据向客户端推送

1、pom依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、事例代码 package com.pojo.prj.controller;import com.pojo.common.core.utils.String…

Zookeeper 可观测性最佳实践

Zookeeper 介绍 ZooKeeper 是一个开源的分布式协调服务&#xff0c;用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题&#xff0c;如数据同步、配置管理、命名服务和集群管理等。本文介绍通过 DataKit 采集 Zookeeper 指标&#…

【安全】DVWA靶场渗透

【安全】DVWA靶场渗透 备注一、环境搭建二、弱口令&#xff08;Brute Force&#xff09;三、命令注入&#xff08;Command Injection&#xff09;四、CSRF&#xff08;Cross Site Request Forgery&#xff09;五、文件包含&#xff08;File Inclusion&#xff09;六、文件上传&…

Ubuntu22.04安装QT、px4安装环境

Ubuntu22.04安装QGC编译环境、QT、px4编译环境 参考文档版本说明安装QGC安装Ubuntu安装QT配置px4安装环境出现错误怎么办 参考文档 PX4 1.15 User Guide 版本说明 PX4&#xff1a;1.15.4 QGC&#xff1a; 安装QGC 我使用的是pixhawk V5飞控&#xff0c;在QGC4.4 Guide里&a…

积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法

目录 前言1. 问题所示2. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 使用帆软报表无错,后续使用积木报表查询出错: 没有显示报表: 具体错误信息如下:

c++基础·左值右值

一、左值与右值的本质特征 1. 基础定义 左值 (lvalue) ✅ 可出现在赋值运算符左侧 ✅ 可被取地址&#xff08;有明确存储位置&#xff09; ✅ 通常为具名变量&#xff08;如int a 10;中的a&#xff09; 右值 (rvalue) ❌ 不可出现在赋值左侧 ❌ 不可取地址&#xff08;无持久…

【Rust 精进之路之第9篇-所有权·核心】规则与移动 (Move):Rust 内存安全基石详解

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025年4月20日 引言:没有 GC,Rust 如何管好内存?答案是所有权! 在我们的 Rust 探索之旅中,我们已经学习了变量、数据类型、控制流、函数和强大的构建工具 Cargo。现在,我们将踏入 Rust 最…

嵌入式学习——opencv图像库编程

环境配置 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和图像处理库&#xff0c;广泛用于各种计算机视觉任务&#xff0c;如图像处理、视频分析、人脸识别、物体检测、机器学习等。它提供了丰富的函数和工具&#xff0c;用于处理…

一招破敌,掌控 React 渲染术:createRoot 与 root.render

前言 在这数字江湖中,前端门派百花齐放,React 一门尤为奇特,讲究“以虚制实,以组件驭天下”。眼下你我初入江湖,第一关便是挂载组件之术。倘若不懂 createRoot 与 root.render,那就像一个新晋小侠,连起手式都没学会,点穴还没碰到 DOM,自己先内伤三分。 来吧,少年!…

Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别

目录 一、工具的本质 二、一些常用的工具 1.yum 2.vim 1&#xff09;vim的三种基本模式&#xff1a; 2&#xff09;vim的基本操作 ①命令模式下的基本操作&#xff1a; ②插入模式&#xff1a; ③底行模式&#xff1a; 3&#xff09;vim的配置&#xff1a;让他变得更好用 3.gcc…

JavaScript 一维数组转不含零的两个数

问题描述&#xff1a; /*** param {number} n* return {number[]}*/ var getNoZeroIntegers function(n) {for(let i 1;i<n;i){if(String(i).indexOf(0) -1&&String(n-i).indexOf(0) -1){return [i,n-i]}}};String类型indexOf()函数如果找不到字串则返回-1&…