Sto riscontrando alcuni problemi durante l'eliminazione di un file in Windows con java. Per qualche ragione, java sta tenendo un blocco sul mio file, e non so perché. Qui è il mio codice:Rilascio del blocco di file Java in 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(), così come cercare manualmente Explorer rifiuta di eliminare il file in quanto è ancora in uso. Comunque, tutto sembra bene in Linux.
Mi manca un close() somehwhere? Posso confermare che il metodo che rende il file in primo luogo è la chiusura del file, in quanto posso eliminare il file prima di eseguire il codice precedente utilizzando file.delete()
Informazioni aggiuntive: Il codice di cui sopra fa parte di un metodo chiamato getFileByteArray (del file) e viene chiamato in questo modo:
public byte[] createReport(int id) {
Report report = new Report();
String filename = report.CreateReport(id);
return getFileByteArray(new File(filename));
}
Grazie
Aggiornamento: sono riuscito a risolvere il problema con la lettura del file di kilobyte per kilobyte nella matrice di byte utilizzando ByteArrayOutputStream
Come poster di seguito menzionato, vi è un bug noto in Java in quanto Windows ha problemi con la mappatura dei file.
Ho provato questo codice in Windows casella il file viene sempre eliminato tramite il codice solo –
@ org.life.java, in modo da dire il mio codice sopra funziona? Tuttavia in Windows Explorer non è possibile eliminarlo ?? – jtnire
puoi pubblicare il tuo intero metodo e chiamare il post principale modificato –