gpt4 book ai didi

java - 如果源路径包含真实文件夹以外的任何内容,则 Path.relativize() 的实际使用情况

转载 作者:行者123 更新时间:2023-12-01 12:48:34 27 4
gpt4 key购买 nike

在准备 java 7 认证考试时,我必须开始仔细研究 Path.relativize() 方法。虽然表面上它的目的似乎很简单,表达了相对于另一个的路径,但我发现它的实现违背了我对文件系统的所有理解,即在 Windows 或 Linux/Unix 上。

考虑以下因素:

// Case 1
System.out.println(Paths.get("c:\\folder1\\folder2").relativize(Paths.get("c:\\file.txt")));

// Case 2
System.out.println(Paths.get("c:\\folder1\\folder2\\other-file.txt").relativize(Paths.get("c:\\file.txt")));

// Case 3
System.out.println(Paths.get("c:\\folder1\\..\\.\\folder1\\..\\.\\folder1\\..\\.\\folder1\\..").relativize(Paths.get("c:\\file.txt")));

我得到的输出是:

..\..\file.txt
..\..\..\file.txt
..\..\..\..\..\..\..\..\..\..\..\file.txt

案例 1 说明了该函数的直接用法,即在给定文件和文件夹的绝对路径的情况下,查找文件相对于文件夹的路径。很好,这给了我一些可以在 Windows 的 cmd 窗口中输入的内容,并且可以正确找到我的文件。

正如其他 StackOverflow 问题中所讨论的,案例 2 强调了这样一个事实:该方法无法区分文件名和文件夹名称(文件夹名称中可以包含 . ,而文件则不能包含 . )。好吧,对我来说,这应该意味着该方法应该附带警告:“使用风险自负,如果提供叶子是文件的路径,相对化结果将无法在文件系统中工作”。或者如果是的话,是哪个文件系统?

案例3对我来说是无稽之谈。该方法甚至没有考虑“.”的含义。和源路径中的“..”,但很高兴在结果中使用“..”作为在源文件夹中上升一级的方式。这在我尚未遇到的理论文件系统中可能有意义,但在 Windows、Linux 或 Unix 中,结果是不可用的。 “..\..\..\..\..\..\..\..\..\..\..\file.txt”当然不会指向 file.txt 相对于尽管表示为“c:\folder1\..\.\folder1\..\.\folder1\..\.\folder1\..”的路径实际上指向“c:\”。

感谢您到目前为止的坚持。问题是:考虑到 Path.relativize() 方法的结果仅在一小部分情况下在现实生活中有意义,人们可以对 Path.relativize() 方法有何用途?

最佳答案

你的表情

Paths.get("c:\\folder1\\..\\.\\folder1\\..\\.\\folder1\\..\\.\\folder1\\..")
标准化后,

实际上只是c:\

如果您随后将 c:\file.txt 与该路径相对化,您将获得一个相对路径,将引导您到达那里。从 c:\ 开始,该相对路径为 file.txt

结果

..\..\..\..\..\..\..\..\..\..\..\file.txt

file.txt完全相同。标准化后,前导 .. 将被丢弃。我同意它并不漂亮,但这只是一个实现细节。

<小时/>

关于java - 如果源路径包含真实文件夹以外的任何内容,则 Path.relativize() 的实际使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com