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

# JDK 17 文件操作与 Path 类速查手册 - r1

# JDK 17 文件操作与 Path 类速查手册 - r1
📅 发布时间:2026/6/23 10:41:47

> 基于 java.nio.file.*,覆盖 Path 基本用法、工作目录 vs 相对路径 vs 绝对路径、常用 Files 工具方法,以及 src/main/resources 的读取策略与打包行为。


1. Path 类:描述路径(替代老 File)

Path p1 = Path.of("/opt/data/1.txt");          // 绝对
Path p2 = Path.of("docs", "readme.md");        // 相对
Path p3 = Paths.get(System.getProperty("user.dir"), "logs", "app.log"); // 拼接
方法 说明
toAbsolutePath() 以工作目录为基准转成绝对路径
toRealPath(...) 解析符号链接、相对段(..、.)
resolve(String/other) 拼接路径(若参量为绝对则直接返回)
relativize(Path) 得到“相对路径”段
getParent / getFileName / getRoot 路径分解

2. 工作目录、相对路径、绝对路径

概念 获取 / 判别 示例值(Linux) 备注
工作目录 System.getProperty("user.dir") /home/bob/project 进程启动位置;IDE 可单独设置
相对路径 Path.of("xxx") data/1.txt 基准 = 工作目录
绝对路径 Path.of("/xxx") 或 p.toAbsolutePath() /home/bob/project/data/1.txt 与 OS 根目录挂钩
Path rel = Path.of("data/1.txt");
Path abs = rel.toAbsolutePath();   // 拼到 user.dir 前
Path real = abs.toRealPath();      // 解析符号链接、..

常用实例方法

方法 说明
toAbsolutePath() 以工作目录为基准转成绝对路径
toRealPath(...) 解析符号链接、相对段(..、.)
resolve(String/other) 拼接路径(若参量为绝对则直接返回)
relativize(Path) 得到“相对路径”段
getParent / getFileName / getRoot 路径分解

2. 工作目录、相对路径、绝对路径

概念 获取 / 判别 示例值(Linux) 备注
工作目录 System.getProperty("user.dir") /home/bob/project 进程启动位置;IDE 可单独设置
相对路径 Path.of("xxx") data/1.txt 基准 = 工作目录
绝对路径 Path.of("/xxx") 或 p.toAbsolutePath() /home/bob/project/data/1.txt 与 OS 根目录挂钩
Path rel = Path.of("data/1.txt");
Path abs = rel.toAbsolutePath();   // 拼到 user.dir 前
Path real = abs.toRealPath();      // 解析符号链接、..

3. Files 工具类:一行完成读写删复制

Path target = Path.of("poem.txt");// 写:覆盖(默认)
Files.writeString(target, "春眠不觉晓\n");// 写:追加
Files.writeString(target, "处处闻啼鸟\n",StandardOpenOption.CREATE, StandardOpenOption.APPEND);// 读
String txt   = Files.readString(target);        // JDK 11+ 默认 UTF-8
List<String> lines = Files.readAllLines(target);// 复制 / 移动 / 删除
Files.copy(src, target, StandardCopyOption.REPLACE_EXISTING);
Files.move(src, target, StandardCopyOption.ATOMIC_MOVE);
Files.deleteIfExists(target);// 遍历(可限制深度)
try (Stream<Path> s = Files.walk(startDir, 3)) {s.filter(Files::isRegularFile).forEach(System.out::println);
}

4. src/main/resources 职责与读取方式

阶段 磁盘位置 打包后位置 读取 API jar 友好
源码 src/main/resources/data/1.txt /data/1.txt(jar 根) getResourceAsStream("/data/1.txt") ✅
编译 target/classes/data/1.txt 同上 同上 ✅
try (InputStream in = MyClass.class.getResourceAsStream("/data/1.txt")) {Objects.requireNonNull(in, "资源不存在");String txt = new String(in.readAllBytes(), StandardCharsets.UTF_8);
}

若必须用 Path 操作 jar 内资源,需新建 FileSystem 再 fs.getPath(...),详见官方文档。

5. 三种场景速查代码

场景 代码片段
读工作目录下文件 Path file = Path.of("data/1.txt");
读绝对路径文件 Path file = Path.of("/etc/hosts");
读 resources MyClass.class.getResourceAsStream("/data/1.txt")

6. 小结

  1. 新代码优先使用 Path + Files,功能全、支持链式/流式操作。

  2. 相对路径基准 = 工作目录(user.dir);绝对路径与 OS 根目录挂钩。

  3. 只读资源放入 src/main/resources,通过 classpath 读取,开发、测试、生产路径一致且自动打进 jar。

  4. 写文件时用 OpenOption 控制覆盖/追加;读 jar 内资源请用 流或 FileSystem,不可直接 Paths.get。

相关新闻

  • 使用Boost实现一个线程安全的map
  • 2025深圳英国留学机构哪个最好
  • 2025去英国哪个留学中介好

最新新闻

  • 先了解:MCP 公开服务市场
  • 2026婚姻家庭辅导师证书课程详解与报考条件,多少费用、证书含金量与官方报名入口:行以学文教育 - 教育推荐官【官方】
  • 2026苏州百达翡丽名表回收行业top1实测 - 奢侈品回收评测
  • 2026池州市初中毕业生升学方案最新发布,电大中专中央广播电视中等专业 - cc江江
  • 肇庆黄金回收计价详解 正规门店上门交易全指南 - 余生黄金回收
  • ERNIE-5.1代码优化版实测:面向工程实践的AI编程新范式

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

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

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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