Datei sperren und löschen
Ich versuche ein Programm in java, dass Monitore und backup-Verzeichnis. Von Zeit zu Zeit habe ich den upload geänderten Dateien in das repository oder das herunterladen, wenn es eine neue version gibt.
Um dies zu tun, muss ich die Datei sperren, so dass der Benutzer nicht in der Lage ist, den Inhalt zu ändern oder zu löschen.
Derzeit bin ich mit diesem code, um die Datei sperren:
file = new RandomAccessFile("C:\\Temp\\report.txt", "rw");
FileChannel fileChannel = file.getChannel();
fileLock = fileChannel.tryLock();
if (fileLock != null) {
System.out.println("File is locked");
try{
//Do what i need
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
else{
System.out.println("Failed");
}
} catch (FileNotFoundException e) {
System.out.println("Failed");
}finally{
if (fileLock != null){
fileLock.release();
}
Allerdings, wenn es eine neue version gibt habe ich zum löschen der alten Datei, und ersetzen Sie durch eine neue.
Aber die lock-Datei nicht erlauben, mich um die Datei zu löschen.
Sollte ich entsperren und löschen, es schreiben Weg, im Vertrauen darauf, dass der Benutzer nicht schreiben in die Datei? Oder gibt es eine andere Möglichkeit, dies zu tun?
InformationsquelleAutor user1308768 | 2012-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du die Datei kürzen könnte:
und danach schreiben Sie die neue version über es, dies wäre nicht der zeitliche Abstand, in dem der Benutzer die Datei erneut.
Aus der Dokumentation:
http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#truncate%28long%29
Sollte ich entsperren und löschen, es schreiben Weg, im Vertrauen darauf, dass der Benutzer nicht schreiben in die Datei? Oder gibt es eine andere Möglichkeit, dies zu tun? habe ich beantwortet mit truncate, die Sie verwenden können, nachdem die Datei ist gesperrt, um die Inhalte zu löschen und schreiben Sie den neuen Inhalt über ihn, so dass Sie nicht die Zeit haben, die Lücke zwischen löschen Sie die Datei und erstellen Sie die neue ein auf der Grundlage der Datei synchronisiert werden.
Ich nur fügen Sie einige zusätzliche Erklärung... bitte lassen Sie mich wissen, wenn Sie brauchen mehr Klarheit.
ah ok. Es ist in der Tat eine Lösung. Was ich im Sinn hatte, war es die move-operation (docs.oracle.com/javase/7/docs/api/java/nio/file/...), denn es ist schneller als das kopieren Sie den Inhalt der Datei. Aber bis jetzt, was du es ist die beste Lösung
InformationsquelleAutor Francisco Spaeth