0

我正在使用 NIO2 从源目录的内容创建一个 zip 文件。我正在使用ZipFileSystem,为此我首先必须获得一个实例,然后生成路径。然后可以使用生成的路径在 zip 文件中使用Files.createDirectory(pathInZip)或创建条目Files.copy(sourcePath, destPathInZip)。这很好用,但是我想避免一些丑陋的时刻:

 // 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;
 }

有没有办法将路径从一个 FileSystemProvider 复制到另一个路径而不依赖于aPath.toString()?看起来很丑。我总是可以遍历一条路径,逐步构建另一条路径……但是拥有一个 FileSystem.getPath(Path anotherPath) 似乎很容易,以至于我花时间写这篇文章。

4

2 回答 2

1

我一直在使用下面的 dirutils lib,我认为它可以满足您的要求。它使用 toPath.resolve()

https://github.com/bbejeck/Java-7/blob/master/src/main/java/bbejeck/nio/files/visitor/CopyDirVisitor.java

编辑:哈哈,既然你这么说,我重新审视了我的代码,发现我只修补了库的那一部分。一个人很容易忘记事情..

 @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;
}
于 2012-10-04T06:47:03.090 回答
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

马文:

<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

于 2012-10-12T10:43:29.983 回答