当前位置: 首页 > news >正文

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

> 基于 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 内资源,需新建 FileSystemfs.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

http://www.jsqmd.com/news/59468/

相关文章:

  • 使用Boost实现一个线程安全的map
  • 2025年湖南景区卖票软件公司权威推荐榜单:景点票务软件‌/智慧旅游软件‌/景区软件‌源头公司精选
  • AI数据标注平台获资,详解其技术架构与功能
  • 2025深圳英国留学中介机构
  • 2025去英国哪个留学中介好
  • 2025 年 12 月卷包机厂家推荐排行榜:全自动床垫/棉被/枕头压缩卷包机,高效便捷的家居包装解决方案!
  • linux查看cpu核心数的命令,方便人类查看
  • 2025年自行走升降机价格源头厂家权威推荐榜单:自行走四桅柱升降机‌/自行走升降机室内‌/自行走升降机‌源头厂家精选
  • 2025 年 12 月面巾纸折叠机/擦手纸折叠机/棉柔巾折叠机厂家推荐排行榜,高效稳定与智能设计的行业首选!
  • 2025年梵尼诗留声机品牌权威推荐榜单:万元音响/万元音箱品牌/万元级礼物品牌精选
  • 三环级联控制的理想采样率
  • 2025年蜂窝斜管填料品牌制造商TOP5榜单,专业解析与选购
  • 2025年国内营销咨询公司排名推荐:营销咨询公司哪家合适?
  • 2025 费用管理系统选型:核心维度对比,避开流程繁琐 的坑
  • Avalonia MenuItem:pointerover setting foreground color
  • 洛谷 P1922:女仆咖啡厅桌游吧 ← 树形DP
  • VNA专用高频测试电缆定制方案与技术应用指南
  • 2025年本地的风机盘管出风箱/风机盘管分风箱厂家最新权威推荐排行榜
  • PbootCMS网站获取指定栏目下面所有单页内容办法(PbootCMS 获取栏目下所有单页内容的方法与代码示例)
  • 2025去英国留学哪个中介好
  • 2025年五大生物绳填料供应商排行榜,生物绳填料定制品牌商新
  • 2025宁波英国留学中介有哪些
  • 2025宁波英国留学中介哪个好
  • 2025年重庆AI搜索排名品牌企业推荐:看看哪家服务性价比高
  • 2025南京英国留学中介排名
  • 完整教程:Mamba YOLO: 基于状态空间模型的目标检测简单基线
  • linux三剑客-awk实战组合用法
  • 口碑不错的吐司连续切片机生产厂家推荐
  • 开放式厨房绝配!2025年油烟吸力表现卓越的十大集成灶品牌权威推荐
  • 题解:Kuangyeyes Random Number