Ich habe einige Probleme beim Löschen einer Datei in Windows mit Java. Aus irgendeinem Grund hält Java meine Datei fest und ich weiß nicht warum. Hier ist mein Code:Java-Dateisperre in Windows freigeben
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(), sowie versuchen, manuell im Explorer die Datei löschen verweigert, da sie immer noch in Gebrauch sind. Unter Linux scheint alles gut zu sein.
Vermisse ich ein close() irgendwo? Ich kann bestätigen, dass die Methode, die die Datei an erster Stelle macht, die Datei schließt, da ich die Datei vor dem Ausführen des obigen Codes mit file.delete() löschen kann
Zusätzliche Informationen: Der obige Code ist Teil eines Verfahrens wie folgt aufgerufen getFileByteArray (File-Datei) und wird genannt:
public byte[] createReport(int id) {
Report report = new Report();
String filename = report.CreateReport(id);
return getFileByteArray(new File(filename));
}
Dank
Update: ich es geschafft, das Problem zu beheben durch das Lesen der Datei Kilobyte durch Kilobyte in das Byte-Array mit ByteArrayOutputStream
Als ein Poster unten erwähnt, gibt es einen bekannten Fehler in Java, dass Windows Probleme mit der Dateizuordnung hat.
habe ich versucht, diesen Code in Windows-Box die Datei durch den Code –
@ org.life.java nur gelöscht wird immer, so dass Sie meinen meine obigen Code funktioniert? Aber im Windows Explorer können Sie es nicht löschen ?? – jtnire
können Sie Ihre gesamte Methode als auch Aufruf Teil –