2009-08-13 7 views
4

Ich müsste etwas große Datei mit Java lesen und verarbeiten, und ich würde gerne wissen, wenn es eine vernünftige Möglichkeit gibt, die Datei zu schützen, dass es nicht von anderen Prozessen überschrieben würde, während ich & Verarbeitung lesen es?Wie kann verhindert werden, dass Dateien überschrieben werden, wenn sie mit Java gelesen und verarbeitet werden?

Das heißt, auf irgendeine Weise es nur schreib zu machen, halten sie „offen“ oder etwas ...

Diese in Windows-Umgebung durchgeführt werden würde.

br, Touko

Antwort

10

Sie wollen ein FileLock:

FileChannel channel = new RandomAccessFile("C:\\foo", "rw").getChannel(); 

// Try acquiring the lock without blocking. This method returns 
// null or throws an exception if the file is already locked. 
FileLock lock = channel.tryLock(); 

// ... 

// release it 
lock.release(); 

der Einfachheit halber ich ein enclosng try/finally-Block ausgelassen haben, aber Sie sollten in Ihrem Produktionscode nicht

+0

Danke, scheint gut; Ich muss es versuchen! – Touko

+0

Hallo, gibt es noch einen Weg, um zu verhindern, dass die Datei bearbeitet wird? Wenn ich exclusive Sperre unter Windows erhalte und sie mit dem Texteditor (Scite zum Beispiel) öffne, wird es mit leerem Inhalt geöffnet, aber wenn ich etwas schreibe und speichere, landet die Datei am Ende geleert? Im Gegensatz dazu, wenn ich versuche, es mit Eclipse zu öffnen, sagt es mir, dass die Datei nicht geöffnet werden kann, weil es von einem anderen Prozess gesperrt ist ... Dies führt wahrscheinlich zu Windows, aber jemand hat ein paar Ideen? – Touko

Verwandte Themen