我使用
java.nio.file.Path
来修改文件系统中不存在但在 ZIP 文件中的路径。当然,我不能使用这样的 Path
实例来读取和写入文件内容,但这在我的上下文中不是问题,我只需要它,例如致电 getParent()
getFileName()
或 getNameCount()
。
通常这很有效,但现在我遇到了一个 ZIP 文件,它使用
|
来表示 ZIP 文件中的某些路径。如果我尝试使用 Paths.get(pathInZip)
解析此类路径,则会产生 java.nio.file.InvalidPathException: Illegal char <|> at index ...
。
有没有办法告诉
Path
它不是操作系统当前文件系统中的路径,因此它不受例如操作系统文件系统的保留字符?
或者这里使用
java.nio.file.Path
是错误的方法?
您应该使用 Zip 文件系统 阅读 zip 文件的内容。然后,您将能够使用一个 Path 来理解 zip 文件中名称中允许包含的所有字符。例如,以下列出了给定 zip 文件的顶级目录的内容:
try (FileSystem fs = FileSystems.newFileSystem(Path.of(zipfile))) {
for (Path directory : fs.getRootDirectories()) {
System.out.println(directory);
Files.list(directory).forEach(path -> System.out.println("\t" + path));
}
}