In diesem Artikel werden 5 Methoden erläutert, um das Schreiben von Java -exklusiven Dateien zu lösen, einschließlich einiger Ihrer eigenen Verständnisse. Wenn es eine Unangemessenheit gibt, können Sie es eingeladen, dies vorzuschlagen.
Lösung 1: Verwenden Sie die Option "Dateioperation" von RandomAccessFile . S bedeutet, im Synchronisierungssperrmodus zu schreiben
RandomAccessfile file = new randomAccessfile (Datei, "rws");
Lösung 2: Verwenden Sie die Dateisperrung von Filechannel
Datei Datei = new Datei ("test.txt"); FileInputStream fis = new FileInputStream (Datei); FileChannel Channel = fis.getChannel (); filelockeLock = null; while (true) {filelock = Channel.trylock (0, long.max_value, false); // True bedeutet ein gemeinsames Schloss, Falsch ist ein exklusives Schloss, wenn (filelock! = null) brechen; sonst // Es gibt andere Fäden, die den Schleuderschlaf besetzen (1000);}; Lösung 3: Schreiben Sie zuerst den Inhalt, der in eine temporäre Datei geschrieben werden soll, und ändern Sie dann den Namen der temporären Datei (Hackschema verwendet das Prinzip der Pufferung + Atombetrieb ).
öffentliche Klasse myfile {private String Dateiname; public myFile (String Dateiname) {this.FileName = Dateiname; } public synchronisierte void wititedata (String data) löst IOException aus {String tmpfilename = uUid.randomuuid (). toString ()+". TMP"; Datei tmpfile = new Datei (tmpfilename); FileWriter fw = neuer FileWriter (TMPFile); fw.write (Daten); fw.flush (); fw.close (); // Benennen Sie nun die Temp -Datei in den gewünschten Namen um. Diese Operation ist eine atomare Operation unter den meisten OS IF (! Lösung 4: Kapitulieren Sie die Datei gemäß dem Dateipfad und verwenden Sie synchronisiert, um das Schreiben der Datei zu steuern
öffentliche Klasse myfile {private String Dateiname; public myFile (String Dateiname) {this.FileName = Dateiname; } public synchronisierte void wititedata (String Data) löst IOException aus {FileWriter fw = neuer FileWriter (Dateiname); fw.write (Daten); fw.flush (); fw.close (); }} Plan 5: Ein Plan, den ich mir ausgedacht habe, ist nicht sehr genau. Simulieren Sie durch das Setzen von Lese- und Schreibberechtigungssteuerung einen beschreibbaren Marker (in ein klassisches Lesen- und Schreibproblem im Betriebssystem umgewandelt ...).
öffentliche Klasse myfile {private volatile boolean canwrite = true; privater String -Dateiname; public myFile (String Dateiname) {this.FileName = Dateiname; } public void wititedata (String -Daten) {while (! canwrite) {try {thread.sleep (100); } catch (interuptedException dh) {} // Sie können eine Zeitleitungszeit festlegen} canwrite = false; // Jetzt Datei canwrite = true schreiben; }}Das obige ist die Lösung für Java ausschließlich zum Schreiben von Dateien. Hast du es gelernt? Sie können sich auf andere Artikel beziehen, um es zu lernen und zu verstehen.