ZipFileSystem无法在路径中以斜杠打开OutputStream

时间:2018-08-14 14:56:50

标签: java scala zipfile

使用以下代码,我得到一个NoSuchFileException: data/: (顺便说一句:对于Java问题的scala语法表示歉意,但这只是我正在使用的环境)

val zipLocation = new File("./test.zip")
val zipUri = URI.create("jar:" + zipLocation.toPath.toUri.normalize)
val env = Map("create" -> "true").asJava
val zipFS = FileSystems.newFileSystem(zipUri, env)
// so far so good
val fooInFolder = zipFS.getPath("/data/foo.txt")
val plainOldFoo = zipFS.getPath("foo.txt")

// this doesn't work
Files.newOutputStream(fooInFolder) // NoSuchFileException: data/
// this works fine
Files.newOutputStream(plainOldFoo)

如果有什么不同,我在Windows上。我尝试在路径中使用反斜杠,但这没什么区别。

这为什么会失败,并且当zip输入路径中存在斜线时,如何使ZipFileSystem正常运行?

1 个答案:

答案 0 :(得分:0)

由于评论中的提示,我找到了答案。

与我以前使用的ZipOutputStream类不同,ZipFileSystem需要先创建目录,然后才能在其中写入文件。

在尝试写入fooInFolder之前添加以下内容解决了该错误。

val folder = zipFS.getPath("data") // or fooInFolder.getParent and a null check
Files.createDirectory(folder) // or Files.createDirectories