java - ZipFileSystem 无法用路径中的斜杠打开 OutputStream
问题描述
使用以下代码,我得到一个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 正常运行?
解决方案
感谢评论中的提示,我找到了答案。
与ZipOutputStream
我以前使用的类不同,它ZipFileSystem
要求您先创建一个目录,然后才能在其中写入文件。
在尝试写入之前添加以下内容以fooInFolder
修复错误。
val folder = zipFS.getPath("data") // or fooInFolder.getParent and a null check
Files.createDirectory(folder) // or Files.createDirectories
推荐阅读
- r - 闪亮 - 不能将类型“闭包”强制转换为“字符”类型的向量
- javascript - 放大镜弹出窗口不起作用..所有文件路径都正确
- javascript - 如何将img标签中的图像源设置为图像对象
- javascript - 在带有 knex 的后续查询中使用由输入语句生成的 id
- elasticsearch - 在elasticsearch中对包含空值的嵌套字段进行排序
- c# - 找不到向量
(跨度 ) 构造函数 - javascript - 如何修复“未定义您的 API”
- android - 活动销毁后内容观察者检测变化,我应该使用服务吗?
- sql - 如何将字符串文本中的值转换为表连接列表 - Teradata SQL
- c# - 如何将 ItemsSource 绑定到 DataTemplate 中的 ComboBox