2012-04-10 8 views
0

Ich möchte meine Eingabe Textdatei in meinem Programm sperren, wenn das nächste Auftreten des Programms auf der gleichen Datei ausgeführt wird, stürzt es ab (löst Ausnahme aus). Ich weiß, dass ich Datei mit "java.nio.channels.FileLock" sperren kann, aber es ist nur möglich, wenn Datei zum Schreiben geöffnet ist, und ich öffne Textdatei nur zum Lesen. Ich möchte nicht "RandomAccessFile" für das Lesen der Datei verwenden, weil es zu langsam ist und meine Dateigröße ist sehr groß (10 GB). Jetzt benutze ich diese wy meine Datei zum Lesen:Wie zu sperren, Textdatei zum Lesen geöffnet?

FileInputStream fstream = new FileInputStream(this.inputFileName); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

Ich denke, diese schnelle Art und Weise ist eine Textdatei zu lesen. Wie kann ich meine Texteingabedatei sperren?

+1

Schauen Sie sich diesen Thread an. http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible – Arash

+0

Danke für die Lösung. – PapaSmurf

+0

Ich fand die Lösung in diesem [link] [1]. [1]: http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible – PapaSmurf

Antwort

0

Ich weiß, dass ich Datei mit „java.nio.channels.FileLock“ sperren kann, aber es ist nur möglich, wenn die Datei zum Schreiben geöffnet ist,

AFAIK ist dies falsch.

Sie können eine FileLock für eine Datei oder einen Bereich einer Datei erwerben, die Sie zum Lesen geöffnet haben. Der Haken dabei ist, dass dies nur dazu dient, zu verhindern, dass eine andere Java-Anwendung eine überlappende FileLock erwirbt. Wenn die andere Anwendung nicht versucht, die Sperre zu erhalten, kann sie die Datei trotzdem lesen. (Die genaue Semantik ist plattformspezifisch.)