Este artigo explica 5 métodos para resolver a redação exclusiva de arquivos da Java, incluindo parte de seu próprio entendimento. Se houver alguma inadequação, você poderá propor isso.
Solução 1: Use opções de operação de arquivo do RandomAccessfile , s significa escrever no modo de bloqueio de sincronização
Arquivo RandomAccessFile = new RandomAccessFile (arquivo, "RWS");
Solução 2: Use o bloqueio do arquivo do FileChannel
Arquivo arquivo = novo arquivo ("test.txt"); fileInputStream fis = new FileInputStream (FILE); FILECHANNEL CANAL = fis.getChannel (); filelock filelock = null; while (true) {filelock = canal.trylock (0, long.max_value, false); // true significa um bloqueio compartilhado, false é uma trava exclusiva se (filelock! = nulo) quebrar; else // Existem outros tópicos que ocupam o sono de trava (1000);} Solução 3: Primeiro, escreva o conteúdo a ser escrito em um arquivo temporário e depois altere o nome do arquivo temporário (o esquema de hacks usa o princípio da operação atômica de buffer + )
classe pública myfile {private string filename; public myfile (string filename) {this.fileName = filename; } public sincronizado void writedata (dados da string) lança IoException {String tmpfilename = uuid.randomuuid (). tostring ()+". tmp"; Arquivo tmpfile = novo arquivo (tmpfilename); FileWriter FW = new FileWriter (TMPFile); fw.write (dados); fw.flush (); fw.close (); // Agora renomeie o arquivo temp para o nome desejado, esta operação é operação atômica na maioria dos sistemas operacionais se (! Solução 4: encapsular o arquivo de acordo com o caminho do arquivo e usar sincronizado para controlar a escrita do arquivo
classe pública myfile {private string filename; public myfile (string filename) {this.fileName = filename; } public sincronizado void writedata (dados da string) lança IoException {FileWriter fw = new FileWriter (nome do arquivo); fw.write (dados); fw.flush (); fw.close (); }} Plano 5: Um plano que criei comigo mesmo não é muito preciso. Ao alternar para definir o controle de permissão de leitura e gravação, simule a configuração de um marcador gravável (transformado em um problema clássico de leitura e gravação no sistema operacional ...)
classe pública myfile {private volátil boolean canwrite = true; nome do arquivo de string privado; public myfile (string filename) {this.fileName = filename; } public void writedata (string data) {while (! canwrite) {try {thread.sleep (100); } catch (interrupteDexception ie) {} // você pode definir um tempo de escrita no tempo limite} canwrite = false; // agora escreva arquivo canwrite = true; }}O exposto acima é a solução para o Java escrevendo exclusivamente arquivos. Você aprendeu? Você pode se referir a outros artigos para aprender e entendê -lo.