Artikel ini menjelaskan 5 metode untuk menyelesaikan penulisan file eksklusif Java, termasuk beberapa pemahaman Anda sendiri. Jika ada ketidaksesuaian, Anda dipersilakan untuk mengusulkannya.
Solusi 1: Gunakan Opsi Operasi File RandomAccessFile S, S berarti menulis dalam mode kunci sinkronisasi
File acakAccessFile = new acakAccessFile (file, "rws");
Solusi 2: Gunakan kunci file FileChannel
File file = file baru ("test.txt"); FileInputStream fis = FileInputStream baru (file); FileChannel channel = fis.getchannel (); filelock filelock = null; while (true) {filelock = channel.trylock (0, long.max_value, false); // Benar berarti kunci bersama, false adalah kunci eksklusif jika (filelock! = null) break; else // ada utas lain yang menempati kunci tidur (1000);} Solusi 3: Pertama -tama tulis konten yang akan ditulis ke dalam file sementara, dan kemudian ubah nama file sementara (skema hack menggunakan prinsip buffering + operasi atom )
kelas publik myfile {private string fileName; myfile publik (string fileName) {this.fileName = fileName; } public yang disinkronkan void writedata (data string) melempar ioException {string tmpFileName = uuid.randomuuid (). tostring ()+". tmp"; File tmpFile = file baru (tmpfileName); FileWriter FW = FileWriter baru (tmpFile); fw.write (data); fw.flush (); fw.close (); // Sekarang ganti nama file temp menjadi nama yang diinginkan, operasi ini adalah operasi atom di bawah sebagian besar OS if (! tmpfile.renameto (fileName) {// kami mungkin ingin mencoba lagi jika bergerak gagal melempar ioException baru ("move fag");}}} Solusi 4: Encapsulate file sesuai dengan jalur file dan gunakan disinkronkan untuk mengontrol penulisan file
kelas publik myfile {private string fileName; myfile publik (string fileName) {this.fileName = fileName; } public yang disinkronkan void writedata (data string) melempar ioException {fileWriter fw = fileWriter baru (nama file); fw.write (data); fw.flush (); fw.close (); }} Rencana 5: Rencana yang saya datangi dengan diri saya sendiri tidak terlalu akurat. Dengan beralih untuk mengatur kontrol izin baca dan tulis, simulasikan pengaturan penanda yang dapat ditulis (diubah menjadi masalah baca dan tulis klasik dalam sistem operasi ...)
kelas publik myfile {private volatile boolean canwrite = true; nama file string pribadi; myfile publik (string fileName) {this.fileName = fileName; } public void writedata (string data) {while (! canwrite) {try {thread.sleep (100); } catch (InteruptedException IE) {} // Anda dapat mengatur waktu tulis timeout} canWrite = false; // sekarang tulis file canwrite = true; }}Di atas adalah solusi untuk Java yang secara eksklusif menulis file. Sudahkah Anda mempelajarinya? Anda dapat merujuk ke artikel lain untuk belajar dan memahaminya.