path负责描述路径,files负责执行动作;paths.get()创建路径并自动适配分隔符,resolve()拼子路径,toabsolutepath()获取绝对路径,resolvesibling()获取同级路径;files静态方法完成i/o,语义明确、异常细分;小文件读写用readstring/writestring等高阶方法,大文件用流式接口;复制移动需显式选项,遍历用files.walk()并注意资源管理。

Java 中 Path 和 Files 是 NIO.2 提供的一套现代、安全、职责清晰的文件操作组合:Path 负责“描述路径”,Files 负责“执行动作”。不需实例化,直接用静态方法,代码简洁且跨平台兼容性好。
快速创建和拼接路径
用 Paths.get() 构建路径对象,自动适配系统分隔符(Windows 用 \,Linux/macOS 用 /),不触发任何 I/O:
-
Paths.get("data", "config.json")→ 拼成data/config.json(或data\config.json) - 拼子路径用 resolve(),不是字符串拼接:
base.resolve("logs/app.log") - 获取绝对路径:调用
path.toAbsolutePath(),避免相对路径误判 - 需要上层同级路径时,用 resolveSibling():
path.resolveSibling("backup.txt")
常用文件与目录操作
所有实际 I/O 都通过 Files 的静态方法完成,语义明确、异常分类细致(如 AccessDeniedException 和 NotDirectoryException 分开抛出):
- 创建目录:多级用
Files.createDirectories(path);单级用Files.createDirectory(path)(父目录必须存在) - 创建空文件:
Files.createFile(path) - 判断状态:
Files.exists(p)、Files.isRegularFile(p)、Files.isExecutable(p),比toFile().exists()更可靠 - 删除:非空目录需先遍历清空,
Files.delete(path)仅支持空目录
读写文件内容(小文件优先用工具方法)
Java 11+ 推荐直接使用高阶方法,自动处理编码、关闭资源,无需手动管理流:
- 读文本:
Files.readString(path, UTF_8) - 写文本:
Files.writeString(path, content, CREATE, WRITE)或追加用APPEND - 读所有行:
Files.readAllLines(path) - 读字节:
Files.readAllBytes(path)(仅限小文件) - 大文件或需控制缓冲区时,用流式接口:
Files.newBufferedReader(path)或Files.newInputStream(path)
复制、移动与递归遍历
操作默认保守(不覆盖、不递归),需显式传入选项才能改变行为:
- 复制文件:
Files.copy(src, dst, REPLACE_EXISTING);复制属性加COPY_ATTRIBUTES - 移动文件:
Files.move(src, dst, REPLACE_EXISTING);原子移动加ATOMIC_MOVE(同文件系统才生效) - 递归遍历:
Files.walk(path)返回Stream<path></path>,记得用 try-with-resources 防句柄泄漏 - 限制深度更安全:
Files.walk(path, 3)防止符号链接循环或深层嵌套失控
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











