我有 Java 代码执行以下操作:
- 使用创建一个带有 ZIP 扩展名的临时空文件
File.createTempFile()
- 删除它
File.delete()
(我们只希望它生成一个临时文件名) com.google.commons.io.ByteStreams.copy()
使用OutputSupplier
给定相同文件名的新文件将“模板”ZIP 文件复制到相同路径- 使用 TrueZIP 7.4.3 修改 ZIP 存档(删除目录)
在特定系统上,第 4 步始终失败FsReadOnlyArchiveFileSystemException - "This is a read-only archive file system!"
(请参阅http://java.net/projects/truezip/lists/users/archive/2011-05/message/9)
调试 TrueZIP 代码,我注意到以下内容:
- 在上述任何步骤之间,该文件没有打开的文件句柄,特别是在第 4 步之前
- 使用 File.canWrite() 而不是 NIO 检查相同的文件在完全相同的时间返回(使用调试器),它表明它是可写的
这是您在调试器表达式列表中看到的内容:
fn => "C:/myworkdir/temp/myfile4088293380313057223tmp.zip"
java.nio.file.Files.isWritable(java.nio.file.Paths.get(fn)) => false
new java.io.File(fn).canWrite() => true
使用 JDK 1.7.04
有任何想法吗?