我正在使用NIO2从源目录的内容创建一个zip文件。我正在使用ZipFileSystem,我首先必须获得一个实例,然后生成路径。然后,可以使用生成的路径使用Files.createDirectory(pathInZip)
或Files.copy(sourcePath, destPathInZip)
在zip文件中创建条目。这样做很好,但是我想避免一些丑陋的时刻:
// within the SimpleFileVisitor that walks through sourceDirFile
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path pathInZip = zipFileSystem.getPath(sourceDirPath.relativize(file).toString()); // <-- ?!
Files.copy(file, pathInZip);
return FileVisitResult.CONTINUE;
}
有没有办法可以将Path从一个FileSystemProvider复制到另一个Path而不依赖aPath.toString()
?看起来很难看。我总是可以迭代一条路径,逐步构建另一条路径......但是我花了很多时间写这篇文章似乎很容易有一个FileSystem.getPath(Path anotherPath)。
答案 0 :(得分:1)
我一直在使用dirutils lib下面,我认为你正在尝试做什么。它使用toPath.resolve()
编辑: 大声笑现在,你说它我重新访问我的代码,并注意到我修补了lib的那一部分。人们很容易忘记这件事......
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Path relativizedPath =fromPath.relativize(dir);
Path targetPath = toPath.resolve(relativizedPath.toString());
if(!Files.exists(targetPath)){
Files.createDirectory(targetPath);
}
return FileVisitResult.CONTINUE;
}
答案 1 :(得分:1)
我已经为此编写了一些实用方法。也许你觉得它们很有用(这个库是开源的)。
教程:http://softsmithy.sourceforge.net/lib/current/docs/tutorial/nio-file/index.html
Javadoc:http://softsmithy.sourceforge.net/lib/current/docs/api/softsmithy-lib-core/index.html
的Maven:
<dependency>
<groupId>org.softsmithy.lib</groupId>
<artifactId>softsmithy-lib-core</artifactId>
<version>0.2</version>
</dependency>
更多信息:http://puces-blog.blogspot.ch/2012/07/news-from-software-smithy-version-02.html