Este artículo explica 5 métodos para resolver la redacción de archivos exclusivos de Java, incluida parte de su propia comprensión. Si hay alguna inapropiación, puede proponerlo.
Solución 1: Use la opción de operación de archivo de RandomAccessFile s, S significa escribir en modo de bloqueo de sincronización
RandomAccessFile file = new RandomAccessFile (archivo, "RWS");
Solución 2: use el bloqueo del archivo de Filechannel
Archivo file = nuevo archivo ("test.txt"); fileInputStream fis = new FileInputStream (archivo); fileChannel Channel = Fis.getChannel (); filelock filelock = null; while (true) {filelock = canal.trylock (0, long.max_value, falso); // Verdadero significa un bloqueo compartido, False es un bloqueo exclusivo if (Filelock! = NULL) Break; más // Hay otros hilos que ocupan el sueño del cierre (1000);} Solución 3: Primero escriba el contenido que se escriba en un archivo temporal y luego cambie el nombre del archivo temporal (Hack Scheme usa el principio de la operación de Buffering + Atomic )
clase pública myFile {private String FileName; public myFile (String FileName) {this.FileName = FileName; } public sincronizado void writedata (string data) lanza ioexception {string tmpFileName = uuid.randomuuid (). toString ()+". tmp"; Archivo tmpfile = nuevo archivo (tmpfileName); FileWriter fw = nuevo FileWriter (TMPFile); fw.write (datos); fw.flush (); fw.close (); // Ahora cambie el nombre del archivo TEMP al nombre deseado, esta operación es una operación atómica en la mayoría de OS if (! TMPFile.Renameto (nombre de archivo) {// Es posible que desee volver a intentar si el movimiento falla, tire la nueva IoException ("Mover fallado");}}} Solución 4: Encapsula el archivo de acuerdo con la ruta del archivo y use sincronizado para controlar la redacción del archivo
clase pública myFile {private String FileName; public myFile (String FileName) {this.FileName = FileName; } public sincronizado void writedata (string data) lanza ioexception {filewriter fw = new FileWriter (nombre de archivo); fw.write (datos); fw.flush (); fw.close (); }} Plan 5: Un plan que se me ocurrió no es muy preciso. Al cambiar para establecer el control de permiso de lectura y escritura, simular la configuración de un marcador de escritura (transformado en un problema clásico de lectura y escritura en el sistema operativo ...)
clase pública myfile {private volatile booleano canwrite = true; nombre de archivo de cadena privada; public myFile (String FileName) {this.FileName = FileName; } public void Writedata (string data) {while (! Canwrite) {try {Thread.sleep (100); } catch (interuptedException IE) {} // Puede establecer un tiempo de escritura de tiempo de espera} canwrite = false; // Ahora escriba el archivo CanWrite = True; }}Lo anterior es la solución a Java escribiendo exclusivamente archivos. ¿Lo has aprendido? Puede consultar otros artículos para aprender y comprenderlo.