355. Java IO API -去除路径中的冗余信息

355. Java IO API -去除路径中的冗余信息 文章目录355. Java IO API -去除路径中的冗余信息 **问题背景** **normalize() 方法清理路径语法**✅ 示例代码输出结果⚠️ **注意事项normalize() 是“语法清理”不是“路径验证”**比如️ **更安全的方式toRealPath()**✅ 小结355. Java IO API -去除路径中的冗余信息在文件系统中有一些特殊的路径标记.表示当前目录current directory..表示父目录parent directory问题背景你可能会遇到这样的路径/home/./joe/foo/home/sally/../joe/foo这些路径虽然可以正常使用但存在冗余部分./实际上什么都没改变sally/..实际上回到了sally的上一级目录也就是去掉了sally我们希望清理这些冗余路径使其更简洁、语义清晰。为此Java 提供了normalize()方法。normalize() 方法清理路径语法normalize()方法会纯粹基于字符串结构来移除路径中的冗余部分例如./会被移除xxx/..会被删除包括xxx和..⚠️ 注意这个过程不会访问实际文件系统它只是语法层面的路径清理。✅ 示例代码importjava.nio.file.Path;importjava.nio.file.Paths;publicclassPathNormalizationExample{publicstaticvoidmain(String[]args){Pathpath1Paths.get(/home/./joe/foo);Pathpath2Paths.get(/home/sally/../joe/foo);System.out.println(Original path1: path1);System.out.println(Normalized path1: path1.normalize());System.out.println(Original path2: path2);System.out.println(Normalized path2: path2.normalize());}}输出结果Originalpath1:/home/./joe/fooNormalizedpath1:/home/joe/fooOriginalpath2:/home/sally/../joe/fooNormalizedpath2:/home/joe/foo⚠️注意事项normalize() 是“语法清理”不是“路径验证”虽然normalize()非常有用但它**不会考虑符号链接symbolic links**或文件系统中的真实结构。比如/home/sally-/mnt/data/logs如果你有路径/home/sally/../joe/foo直接normalize()会变成/home/joe/foo。但这时候sally实际是个链接删掉它可能指向了错误的路径️更安全的方式toRealPath()如果希望在清理路径的同时确认文件或目录真实存在且正确解析符号链接请使用toRealPath()方法。PathpathPaths.get(/home/sally/../joe/foo);PathrealPathpath.toRealPath();// 会解析链接并检查文件存在性如果路径不存在或无法解析会抛出异常会返回标准化、绝对的、符号链接已解析的路径✅ 小结方法功能说明是否访问文件系统normalize()清除路径中的.和../只做语法层面简化❌ 否toRealPath()返回真实存在的路径解析符号链接并验证实际文件结构✅ 是