我正在将文件从jar复制到本地文件夹。
jar位于 a/b
.
我试图提取的文件夹(在jar中)位于 b/c
目标文件夹应为 z
,即。 a/b/c/x
-> z/x
当我使用 c.relativize("x")
我明白了 ../c/x
而不是 x
.
当我尝试这样做时,这是一个问题: z.resolve(c.relativize(x))
.
我明白了 z/../c/x
而不是 z/x
如何解决此问题?
我试过了 z.resolve(c.relativize(x).normalise())
但得到同样的结果
jar是空的 b
在文件夹中 a
. c
是jar中的一个资源(文件夹) b
. x
是文件夹中的文件 c
.
2条答案
按热度按时间9rnv2umw1#
jar在文件夹a/b中/
jar中的源文件夹路径是/b/c/with file/b/c/.yyy
目标文件夹是z
目标文件的路径应为:z/.yyy
所以:
主要的问题是
relativize
; 我不是第一次遇到这种误解。child.relativize(parent)
给一个..
鉴于parent.relativize(child)
截断路径。要获得目标路径,需要将源路径转换为字符串,以防止合并两个不同的文件系统。
(我没有处理子目录。)
jexiocij2#
我想你误解了
path.relativize(Path)
根据https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/path.html#relativize(java.nio.file.path),有如下语句:在该路径和给定路径之间构造相对路径。
例如
假设结果是
../b
,这是什么意思?它实际上是在告诉你:因为你在目录里面
a
,如果要访问目录b
,您需要通过此方法访问cd ../b
.relativize(Path)
有助于分析父路径和子路径之间的相对路径(即如何从父路径访问子路径)。或者,从您的问题来看,您更喜欢“构造”路径,而不是“分析”相对路径。
relativize(Path)
不是为了这个目的。那么,你想实现哪一个“手工构造”还是“分析”?