Ho codice Java nel seguente modo:java.nio.file.Files.isWriteable non è d'accordo con java.io.File.canWrite()
- Creare un file vuoto temporaneo con estensione ZIP utilizzando
File.createTempFile()
- Cancellare con
File.delete()
(abbiamo solo voluto che generare un nome file temporaneo) - Copiare un "modello" file ZIP per lo stesso percorso con
com.google.commons.io.ByteStreams.copy()
utilizzando un nuovoOutputSupplier
dato lo stesso nome del file - Modificare la ZIP archivio (rimuovi un diretto ORY) utilizzando TrueZIP 7.4.3
Su un sistema specifico, il passaggio 4 non riesce coerentemente con FsReadOnlyArchiveFileSystemException - "This is a read-only archive file system!"
(vedi http://java.net/projects/truezip/lists/users/archive/2011-05/message/9)
Debug del codice di TrueZIP, ho notato quanto segue:
- C'è nessun handle di file aperto su questo file tra uno qualsiasi dei passaggi precedenti e in particolare non prima del passaggio 4
- Controllare lo stesso file con File.canWrite() anziché NIO restituisce allo stesso tempo (usando un debugger), mostra quella è scrivibile
Ecco quello che si vede nella lista di espressioni del debugger:
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
Utilizzando JDK 1.7.04
Tutte le idee?
Vorrei provare Java 7 update 7 per vedere se è un bug che è stato corretto. –
Eviterei di utilizzare entrambe le API e invece di fare affidamento sulle eccezioni generate da es. 'new FileOutputStream()'. – EJP
non userei java 7, per iniziare con – njzk2