que tiene el código de Java haciendo lo siguiente:java.nio.file.Files.isWriteable no está de acuerdo con java.io.File.canWrite()
- Cree un archivo vacío temporal con extensión ZIP utilizando
File.createTempFile()
- Eliminar con
File.delete()
(que en realidad sólo queríamos que genere un nombre de archivo temporal) - Copiar una "plantilla" archivo ZIP en el mismo camino con
com.google.commons.io.ByteStreams.copy()
usando un nuevoOutputSupplier
dado el mismo nombre de archivo - Modificar la postal archivo (eliminar un directo ORY) usando TrueZIP 7.4.3
En un sistema específico, paso 4 falla constantemente con FsReadOnlyArchiveFileSystemException - "This is a read-only archive file system!"
(ver http://java.net/projects/truezip/lists/users/archive/2011-05/message/9)
Depuración del código TrueZIP, he notado lo siguiente:
- Hay no hay ningún archivo abierto manejar en este archivo entre cualquiera de los pasos anteriores, y específicamente no antes del paso 4
- Comprobando el mismo archivo con File.canWrite() en lugar de NIO regresa exactamente al mismo tiempo (utilizando un depurador), se muestra ese que se puede escribir
Aquí es lo que se ve en la lista de expresiones del depurador:
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
El uso de JDK 1.7.04
¿Alguna idea?
Me gustaría probar Java 7 actualización 7 para ver si se trata de un error que se ha solucionado. –
Evitaría usar ambas API y, en su lugar, confiaré en las excepciones arrojadas, por ejemplo, por las API. 'nuevo FileOutputStream()'. – EJP
no usaría java 7, para comenzar con – njzk2