Java File 类详解

news2025/4/21 6:46:15

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.coloradmin.cn/o/2339255.html

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

相关文章

前端与传统接口的桥梁:JSONP解决方案

1.JSONP原理 1.1.动态脚本注入 说明&#xff1a;通过创建 <script> 标签绕过浏览器同源策略 1.2.回调约定 说明&#xff1a;服务端返回 函数名(JSON数据) 格式的JS代码 1.3.自动执行 说明&#xff1a;浏览器加载脚本后立即触发前端预定义的回调函数&#xff08;现代开…

编码器---正交编码器

一、正交编码器定义与核心作用 正交编码器&#xff08;Orthogonal Encoder&#xff09;&#xff0c;又称增量式编码器&#xff0c;是一种通过输出两路相位差90的脉冲信号&#xff08;A相、B相&#xff09;来测量旋转角度、速度和方向的传感器。其核心优势是通过A/B相的脉冲顺序…

开发环境解决浏览器层面跨域问题

适用于开发环境临时调试等情况 新建一个 Chrome 的快捷方式&#xff0c;目标后面跟上&#xff1a; –disable-web-security --disable-gpu --user-data-dir%LOCALAPPDATA%\Google\chromeTemp 打开后会给出不安全的提示

2025年渗透测试面试题总结-拷打题库07(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库07 1. CMS目录扫描的意义 2. 常见网站服务器容器 3. MySQL写入We…

深入理解Linux中的线程控制:多线程编程的实战技巧

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; POSIX线程&#xff08;Pthreads&#xff09; 是一种在 POSIX 标准下定义的线程库&#xff0c;它为多线程编程提供了统一的接口&#xff0c;主要用于 UNIX 和类 UNIX 系统&#xff08;如 Linux、MacOS 和 BS…

【条形码识别改名工具】如何批量识别图片条形码,并以条码内容批量重命名,基于WPF和Zxing的开发总结

批量图片条形码识别与重命名系统 (WPF + ZXing)开发总结 项目适用场景 ​​电商商品管理​​:批量处理商品图片,根据条形码自动分类归档​​图书馆系统​​:扫描图书条形码快速建立电子档案​​医疗档案管理​​:通过药品条形码整理医疗图片资料​​仓储管理​​:自动化识…

【C++】 —— 笔试刷题day_22

一、添加字符 题目解析 这道题&#xff0c;给定两个字符串A和B&#xff0c;字符串A的长度要小于B的长度&#xff1b; 现在我们要对A字符串添加字符&#xff0c;使得A字符串长度等于B字符串的长度&#xff0c;并且要求对应位置的字母尽量相等&#xff0c;然后求出来不相等的字符…

【Android面试八股文】Android应用进程的启动流程【二】

应用进程 1.1 Android系统进程的启动过程&#xff1a; 1、init进程fork出Zygote进程后&#xff0c;Zygote进程会创建一个服务端socket&#xff0c;等待AMS发起socket请求。 同时&#xff0c;由Zygote进程fork出的SystemServer进程会启动各项系统服务&#xff0c;其中就包含了A…

“星睿O6” AI PC开发套件评测 - 部署PVE搭建All in One NAS服务器

Radxa O6平台上部署PVE搭建All in One NAS服务器 Radxa O6是一款性能卓越的单板计算机&#xff0c;其强劲的硬件配置和多样化的接口设计&#xff0c;使其成为家庭和小型企业理想的All in One服务器解决方案。值得一提的是&#xff0c;O6原生配备了两个5G网口&#xff0c;便于直…

全志H5,NanopiKP1lus移植QT5.12记录

移植步骤 机器环境下载QT5.12.0源码安装交叉编译器修改qmake.conf文件配置编译选项qt5的configure选项说明基本配置选项编译器和链接器选项功能模块配置第三方库集成注意事项 配置过程报错解决配置完成编译过程报错解决编译完成将arm-qt文件夹传送到开发板配置板子环境变量运行…

使用EXCEL绘制平滑曲线

播主播主&#xff0c;你都多少天没更新了&#xff01;&#xff01;&#xff01;泥在干什么&#xff1f;你还做这个账号麻&#xff1f;&#xff01;&#xff01;&#xff01; 做的做的&#xff08;哭唧唧&#xff09;&#xff0c;就是最近有些忙&#xff0c;以及…… 前言&…

Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>

‌HTOC&#xff08;十字军的试炼&#xff09;副本中各个BOSS的ID如下‌&#xff1a; ‌629 - 诺森德野兽‌ ‌633 - 加拉克苏斯大王‌ ‌637 - 派系冠军‌ ‌641 - 瓦格里双子‌ ‌645 - 阿努巴拉克‌ encounterID!637 and encounterID!641 encounterID NOT IN (637,641) 伤害 …

在服务器上部署MinIO Server

MinIO的优势 高性能&#xff1a;MinIO号称是目前速度最快的对象存储服务器&#xff0c;据称在标准硬件上&#xff0c;对象存储的读/写速度最高可以高达183 GB/s和171 GB/s&#xff0c;可惜我的磁盘跟不上 兼容性&#xff1a;MinIO基于Amazon S3协议&#xff0c;并提供了与S3兼…

一个改善Entity Framework异常处理和错误信息的开源项目

使用DDD从零构建一个完整的系统 使用Entity Framework作为ORM框架应该是绝大多数项目的选择&#xff0c;使得我们操作数据库变得简单方便&#xff1b;但是我们操作数据库&#xff0c;绝对是无法避免数据库发生异常的情况&#xff0c;数据库针对每一种异常也都会提供一个编码来…

计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪

1. 概述 目标检测&#xff08;Object Detection&#xff09;和目标追踪&#xff08;Object Tracking&#xff09;是计算机视觉中的两个关键技术&#xff0c;它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象&#xff0…

PHP使用pandoc把markdown文件转为word

文章目录 首先安装pandocPHP处理 服务器操作系统是Linux&#xff0c;centos 首先安装pandoc yum install -y pandoc安装完成后输入如下代码&#xff0c;检查安装是否成功 pandoc --versionPHP处理 我把markdown内容存到了数据库里&#xff0c;所以要从数据库读取内容。对内容…

OBS 日期时间.毫秒时间脚本 date-and-time.lua

文章目录 OBS 日期时间.毫秒时间脚本&#xff1a;效果 OBS 日期时间.毫秒时间脚本&#xff1a; obs obslua source_name ""last_text "" format_string "" activated false-- 此函数用于获取精确的毫秒级时间戳&#…

探索大语言模型(LLM):目标、原理、挑战与解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言语言模型的目标语言模型的数学表示语言模型面临的挑战解决参数量巨大的方法1. 马尔可夫假设2. 神经网络语言模型3.自监督学习4. 分布式表示 脑图总结 前言 在自…

ES基本操作(Java API)

1. 导入restClient依赖 <!-- es --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency> <!…

得物官网sign签名逆向分析

打开得物官网&#xff0c;点击鞋类&#xff0c;可以看到请求 直接搜sign function p(e) {return f()("".concat(e ? s()(e).sort().reduce(function(t, n) {return "".concat(t).concat(n).concat(e[n])}, "") : "", "048a9…