使用以下代码,我得到一个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正常运行?
答案 0 :(得分:0)
由于评论中的提示,我找到了答案。
与我以前使用的ZipOutputStream
类不同,ZipFileSystem
需要先创建目录,然后才能在其中写入文件。
在尝试写入fooInFolder
之前添加以下内容解决了该错误。
val folder = zipFS.getPath("data") // or fooInFolder.getParent and a null check
Files.createDirectory(folder) // or Files.createDirectories