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 类 - 菜鸟教程
