尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[Java SE/文件系统/IO] 核心源码精讲:java.io.File

[Java SE/文件系统/IO] 核心源码精讲:java.io.File
📅 发布时间:2026/6/18 0:04:44

1 概述:java.io.File

Java 流(Stream)、文件(File)和IO

  • Java 中的流(Stream)、文件(File)和 IO(输入输出)是处理数据读取和写入的基础设施

它们允许程序与外部数据(如文件、网络、系统输入等)进行交互。

  • java.io 包是 Java 标准库中的一个核心包,提供了用于系统输入和输出的类,它包含了处理数据流(字节流和字符流)、文件读写、序列化以及数据格式化的工具。
  • java.io 是处理文件操作、流操作以及低级别 IO 操作的基础包。
  • java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
  • 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

java.io.File

  • 在 Java 中,File 类是 java.io 包的一个基础组件,它用于处理文件和目录路径名。

  • Java File 类以抽象的方式代表文件名和目录路径名,File 类主要用于文件和目录的创建、文件的查找和文件的删除等。

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

2 使用指南

构造方法

File 对象代表磁盘中实际存在的文件和目录,通过以下构造方法创建一个 File 对象。

  • 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例:
File file = new File(String pathname);

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

  • 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File file = new File(String parent, String child);

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

  • 通过给定的父抽象路径名和子路径名字符串创建一个新的 File 实例:
File file = new File(File parent, String child);

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

  • 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
File file = new File(URI uri) 

非构造方法

各方法亦可参见: https://www.runoob.com/java/java-file.html

序号 方法描述
1 public String getName() 返回由此抽象路径名表示的文件或目录的名称。
2 public String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。
3 public File getParentFile() 返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回 null。
4 public String getPath() 将此抽象路径名转换为一个路径名字符串。
5 public boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。
6 public String getAbsolutePath() 返回抽象路径名的绝对路径名字符串。
7 public boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
8 public boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
9 public boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
10 public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
11 public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
12 public long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
13 public long length() 返回由此抽象路径名表示的文件的长度。
14 public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
15 public boolean delete() 删除此抽象路径名表示的文件或目录。
16 public void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
17 [public String] list() 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
18 [public String] list(FilenameFilter filter) 返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。
19 [public File] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
20 [public File] listFiles(FileFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
21 public boolean mkdir() 创建此抽象路径名指定的目录。
22 public boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
23 public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
24 public boolean setLastModified(long time) 设置由此抽象路径名所指定的文件或目录的最后一次修改时间。
25 public boolean setReadOnly() 标记此抽象路径名指定的文件或目录,以便只可对其进行读操作。
26 public static File createTempFile(String prefix, String suffix, File directory) throws IOException 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
27 public static File createTempFile(String prefix, String suffix) throws IOException 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
28 public int compareTo(File pathname) 按字母顺序比较两个抽象路径名。
29 public int compareTo(Object o) 按字母顺序比较抽象路径名与给定对象。
30 public boolean equals(Object obj) 测试此抽象路径名与给定对象是否相等。
31 public String toString() 返回此抽象路径名的路径名字符串。

G 案例实践

CASE File#getXxxPath()方法间的差异

  • file.getPath()
D:\Workspace\Projects\xxx-Project\0400-Deploy\xxx-sdk-helper\NEXT\xxx-env\xxx.7.dbc
  • file.getName()
xxx.7.dbc
  • file.getAbsolutePath()
D:\Workspace\Projects\xxx-Project\0400-Deploy\xxx-sdk-helper\NEXT\xxx-env\xxx.7.dbc
  • file.getCanonicalPath()
D:\Workspace\Projects\xxx-Project\0400-Deploy\xxx-sdk-helper\NEXT\xxx-env\xxx.7.dbc
  • file.getParent()
D:\Workspace\Projects\xxx-Project\0400-Deploy\xxx-sdk-helper\NEXT\xxx-env
  • new URL("file:\\D:\\Workspace\\Projects\\xxx-Project\\0400-Deploy\\xxx-sdk-helper\\NEXT\\xxx-env\\xxx.7.dbc").getPath()
"/D:/Workspace/Projects/xxx-Project/0400-Deploy/xxx-sdk-helper/NEXT/xxx-env/xxx.7.dbc"
"/Workspace/Projects/xxx-Project/0400-Deploy/xxx-sdk-helper/NEXT/xxx-env/xxx.7.dbc"
  • new URL("file://").getPath()
""
  • new URL("file:///").getPath()
"/"

Z 最佳实践

FileFormatEnum

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;/*** @update-time 2025/09/20 22:46* @description 文件格式的枚举类* @refrence-doc* @gpt-promt*/
public enum FileFormatEnum {HEX_BIN("HEX_BIN", ".hex-bin"), BIN("BIN", ".bin"), JSON("JSON", ".json");private String code;private String format;private static Map<String, FileFormatEnum> FILE_FORMAT_CODES = new HashMap<>();//key=codeprivate static Map<String, FileFormatEnum> FILE_FORMAT_FORMATS = new HashMap<>();//key=formatstatic {for (FileFormatEnum type : values()) {FILE_FORMAT_CODES.put( type.code, type );FILE_FORMAT_FORMATS.put( type.format, type );}}FileFormatEnum(String code, String format) {this.code = code;this.format = format;}public static FileFormatEnum findByCode(String code) {return FILE_FORMAT_CODES.get(code);}public static FileFormatEnum findByFormat(String format) {return FILE_FORMAT_FORMATS.get(format);}public static FileFormatEnum findByFileName(String fileName) {/*** 切割文件名称* @note*  0. "target.zstd.hex-bin".split("\\."); => ["target", "zstd", "hex-bin"]*  1. "xx.tar.gz".split("\\.", 2); => ["xx", "tar", "gz"]*  2. ".tar.gz".split("\\."); => ["", "tar" , "gz"]*  3. "xx.gz".split("\\.", 2); => ["xx", "gz"]*  4. "xxx".split("\\.", 2); => ["xxx"] (异常情况)*///String [] fileNameInfo = fileName.split("\\.");//因: 正则表达式,需要转义`\\`处理//if( fileNameInfo.length <= 1){//    throw new RuntimeException("The file name is naming abnormal!fileName:" + fileName); //文件名称命名异常//}//String fileFormat = "." + fileNameInfo[fileNameInfo.length - 1];//取最后一段//FileFormatEnum fileFormatEnum = findByFormat( fileFormat );AtomicReference<FileFormatEnum> fileFormatEnum = new AtomicReference(null);FILE_FORMAT_FORMATS.entrySet().stream().forEach(fileFormatEntry -> {if( fileName.toLowerCase().endsWith( fileFormatEntry.getKey().toLowerCase() ) ) {fileFormatEnum.set( fileFormatEntry.getValue() );}});return fileFormatEnum.get();}public static FileFormatEnum findByFileNameThrowExceptionWhenNotFound(String fileName, Boolean throwExceptionWhenNotFound) {FileFormatEnum fileFormatEnum = findByFileName(fileName);if(fileFormatEnum == null && throwExceptionWhenNotFound){throw new RuntimeException("Not found the file format!fileName:" + fileName);}return fileFormatEnum;}public String getCode() {return code;}public String getFormat() {return format;}
}

Y 推荐文献

  • [Java SE] 基础工具库 : Apache Commons IO - 博客园/千千寰宇

X 参考文献

  • Java 流(Stream)、文件(File)和IO - 菜鸟教程
  • Java File 类 - 菜鸟教程
QQ沟通交流群
本文作者: 千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

相关新闻

  • 【ROS2】 忽略局域网多机通信导致数据接收的bug - 教程
  • 在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境
  • 重新理解12306:它卖的从来不是“库存”,而是“状态”

最新新闻

  • 靠谱的企业管理咨询公司推荐榜2026 - 资讯纵览
  • GEO 优化服务商哪家落地效果真实可查?2026 五家高口碑机构深度评测 - 小兔崽子cheng
  • Java 明明有 GC,为什么还会 OOM?生产事故引起了一下反思
  • 2026 年北京洋酒高价回收机构甄选:专业鉴定与高溢价变现行业参考 - 资讯纵览
  • Tortoise ORM:Python 异步世界的 Django 风格 ORM
  • 常州保时捷帕拉梅拉音响改装 音乐人生打造劲浪乌托邦打造移动音乐厅 - 音乐人生汽车音响

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号