我有Java代碼執行以下操作:java.nio.file.Files.isWriteable不java.io.File.canWrite()同意
- 創建ZIP擴展使用
File.createTempFile()
臨時空文件 - 與
File.delete()
刪除它(我們需要的只是它來生成臨時文件名)採用了全新的OutputSupplier
- 複製「模板」 ZIP文件相同的路徑與
com.google.commons.io.ByteStreams.copy()
給出了相同的文件名 - 修改ZIP歸檔(刪除直接ORY)使用TrueZIP 7.4.3
在一個特定的系統中,步驟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檢查相同的文件會返回完全相同的時間(使用調試器),它顯示那它是可寫的
下面是你在調試器中的表達式列表,請參閱:使用JDK 04年7月1日
任何想法
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
?
我會嘗試Java 7更新7,看看它是否已修復一個錯誤。 –
我會避免使用這兩個API,而是依賴例如拋出的異常。 '新的FileOutputStream()'。 – EJP
我不會使用java 7,以 – njzk2