file类负责文件/目录的定位与管理(如创建、删除、类型判断),io流负责读写内容;二者协同但职责分明,file不读写数据,io流不处理路径逻辑。

Java 中的 File 类和 IO 流是文件系统操作的两大基础支柱:File 类负责“定位”和“管理”文件/目录(如创建、删除、判断类型),而 IO 流负责“读写”文件内容(如复制、解析、转换)。二者常配合使用,但职责分明——File 不读写数据,IO 流不处理路径逻辑。
File 对象的创建与路径处理
File 类本质是路径的抽象表示,不依赖真实文件存在。构造方式灵活,支持跨平台:
-
绝对路径:以盘符(Windows)或根目录(Linux/macOS)开头,如
new File("D:\data\config.txt")或new File("/home/user/log/") -
相对路径:以项目根目录(IDEA 运行时)或当前工作目录(命令行运行 jar 时)为基准,如
new File("src/main/resources/app.properties") -
父子路径组合:更安全、可读性更强,例如
new File(new File("data"), "output.log")
注意:File 构造不会检查路径有效性;getAbsolutePath() 返回完整物理路径,getPath() 返回原始传入路径(含相对符号如 .. 或 .)。
文件与目录的判断和基础操作
通过布尔方法快速识别类型和状态,再执行对应操作:
- 用
exists()判断是否存在(文件或目录均可) - 用
isFile()和isDirectory()明确区分类型 - 创建文件:
createNewFile()—— 仅当文件不存在时成功,且父目录必须已存在 - 创建目录:
mkdir()创建单级目录;mkdirs()可递归创建多级(推荐用于确保路径完整) - 删除:
delete()直接永久移除,但无法删除非空目录;若需清空整个目录树,需先递归遍历并逐个删除
目录遍历与文件信息获取
批量处理文件前,常需枚举子项并提取元数据:
-
listFiles()返回File[],包含所有子文件/子目录对象(null表示非目录或无权限) -
list()返回String[],仅含名称字符串,适合简单筛选 - 常用属性:
getName()(纯文件名)、length()(字节数,对目录返回 0)、lastModified()(毫秒时间戳)、isHidden()、canRead()/canWrite() - 过滤可用
listFiles(FilenameFilter),例如只列出.log文件:file.listFiles((dir, name) -> name.endsWith(".log"))
IO 流与 File 的协同使用
File 对象通常作为流的“地址参数”,真正读写由流完成:
- 字节流适用于所有文件(图片、音频、jar 包等):
FileInputStream/FileOutputStream - 字符流专用于文本文件(避免编码问题):
FileReader/FileWriter,但建议搭配InputStreamReader+OutputStreamWriter显式指定编码 - 务必关闭流资源:优先使用
try-with-resources自动释放,避免内存泄漏和文件句柄占用 - 示例:复制一个文件
OutputStream out = new FileOutputStream(destFile)) {
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











