Tengo algunos problemas para eliminar un archivo en Windows con Java. Por alguna razón, java mantiene un bloqueo en mi archivo, y no sé por qué. Aquí está mi código:Liberar bloqueo de archivos Java en Windows
private byte[] getFileByteArray(File file) {
try {
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
try {
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
byte[] bt = new byte[buffer.remaining()];
buffer.get(bt);
channel.close();
raf.close();
file.delete();
return bt;
} catch (Exception ex) {
//Logger.getLogger(ConnectionImpl.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.toString());
}
} catch (FileNotFoundException ex) {
Logger.getLogger(ConnectionImpl.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
File.delete(), así como tratar de forma manual en el Explorador se niega a eliminar el archivo, ya que todavía está en uso. Sin embargo, todo parece estar bien en Linux.
Me estoy perdiendo un cerrar() en algún lugar? Puedo confirmar que el método que hace el archivo en primer lugar es cerrar el archivo, ya que puedo eliminar el archivo antes de ejecutar el código anterior usando file.delete()
Información adicional: El código anterior es parte de un método llamado getFileByteArray (archivo) y que se llama así:
public byte[] createReport(int id) {
Report report = new Report();
String filename = report.CreateReport(id);
return getFileByteArray(new File(filename));
}
Gracias
actualización: he conseguido solucionar el problema mediante la lectura de la kilobytes de archivos por kilobyte en el conjunto de bytes con ByteArrayOutputStream
Como se menciona a continuación, hay un error conocido en Java en el sentido de que Windows tiene problemas con la asignación de archivos.
yo probamos este código en la caja ventanas el archivo se elimina a través de conseguir código sólo –
@ org.life.java, lo que significa que mi código de arriba funciona? Sin embargo, en el explorador de Windows no puede eliminarlo ?? – jtnire
puede publicar todo el método, así como llamar a la parte –