java.nio.file.Files.isWriteable 不同意 java.io.File.canWrite()

标签 java nio temporary-files truezip writable

我有 Java 代码执行以下操作:

  1. 使用 File.createTempFile() 创建一个带 ZIP 扩展名的临时空文件
  2. File.delete() 删除它(我们真的只希望它生成一个临时文件名)
  3. 使用新的 OutputSupplier 将"template"ZIP 文件复制到与 com.google.commons.io.ByteStreams.copy() 相同的路径并给定相同的文件名
  4. 使用 TrueZIP 7.4.3 修改 ZIP 存档(删除目录)

在特定系统上,第 4 步始终失败并出现 FsReadOnlyArchiveFileSystemException -“这是一个只读存档文件系统!”(请参阅 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

有什么想法吗?

最佳答案

windows下的java.nio.file.Files.isWritable有一个bug: 它不会考虑隐式权限。 java bug #7190897

关于java.nio.file.Files.isWriteable 不同意 java.io.File.canWrite(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688287/

相关文章:

c# - 临时文件夹中的文件是否自动删除?

java - Java 数组中单个值的递增

java - Spring hibernate : Getting list of objects from a list of unique values

java - Okhttp3 在 Android Studio 中看不到 WebSocket 接口(interface)

JAVA SSLENGINE : Unsupported record version Unknown-0. 0 尝试使用 SSLEngine 解开字节缓冲区记录时

python - 为什么 tempfile 似乎在 with 语句中删除了自身?

java - 使用字符串值作为计算java的 float

java - SocketChannel read() 行为 - 短读取

java - 使用自签名证书和 SSLEngine (JSSE) 的 SSL 握手

python - 在脚本评估期间删除临时文件