บทความนี้อธิบาย 5 วิธีในการแก้ปัญหาการเขียนไฟล์พิเศษของ Java รวมถึงความเข้าใจของคุณเอง หากมีความไม่เหมาะสมใด ๆ คุณสามารถเสนอได้
โซลูชัน 1: ใช้ตัวเลือกการใช้งานไฟล์ของแบบ สุ่ม
File RandomAccessFile = new RandomActEncessFile (ไฟล์, "RWS");
โซลูชัน 2: ใช้ล็อคไฟล์ของ FileChannel
ไฟล์ไฟล์ = ไฟล์ใหม่ ("test.txt"); fileInputStream fis = ใหม่ fileInputStream (ไฟล์); ช่อง fileChannel = fis.getChannel (); filelock filelock = null; // True หมายถึงการล็อคที่ใช้ร่วมกันเท็จคือล็อคพิเศษถ้า (filelock! = null) break; อื่น // มีเธรดอื่น ๆ ที่ครอบครองการนอนหลับล็อค (1,000);} วิธีแก้ปัญหาที่ 3: ก่อนอื่นเขียนเนื้อหาที่จะเขียนลงในไฟล์ชั่วคราวจากนั้นเปลี่ยนชื่อของไฟล์ชั่วคราว (Hack Scheme ใช้หลักการของ การบัฟเฟอร์ + การทำงานของอะตอม )
คลาสสาธารณะ myfile {ชื่อไฟล์สตริงส่วนตัว; public myFile (ชื่อไฟล์สตริง) {this.filename = filename; } โมฆะที่ซิงโครไนซ์สาธารณะ writedata (ข้อมูลสตริง) พ่น IOException {สตริง tmpfilename = uuid.randomuuid (). toString ()+". tmp"; ไฟล์ tmpfile = ไฟล์ใหม่ (tmpfilename); FileWriter FW = ใหม่ FileWriter (TMPFile); fw.write (ข้อมูล); fw.flush (); fw.close (); // ตอนนี้เปลี่ยนชื่อไฟล์อุณหภูมิเป็นชื่อที่ต้องการการดำเนินการนี้เป็นการดำเนินการอะตอมภายใต้ระบบปฏิบัติการส่วนใหญ่ถ้า (! tmpfile.renameto (ชื่อไฟล์) {// เราอาจต้องการลองอีกครั้งหากการย้ายล้มเหลว โซลูชัน 4: ห่อหุ้มไฟล์ตามเส้นทางไฟล์และใช้ ซิงโครไนซ์ เพื่อควบคุมการเขียนของไฟล์
คลาสสาธารณะ myfile {ชื่อไฟล์สตริงส่วนตัว; public myFile (ชื่อไฟล์สตริง) {this.filename = filename; } สาธารณะที่ซิงโครไนซ์เป็นโมฆะ writeData (ข้อมูลสตริง) พ่น IOException {fileWriter fw = fileWriter ใหม่ (ชื่อไฟล์); fw.write (ข้อมูล); fw.flush (); fw.close (); - แผน 5: แผนการที่ฉันคิดขึ้นมาเองนั้นไม่ถูกต้องมากนัก โดยการเปลี่ยนเป็นชุดการควบคุมการอ่านและเขียนให้จำลองการตั้งค่าเครื่องหมายที่เขียนได้ (เปลี่ยนเป็นปัญหาการอ่านและเขียนแบบคลาสสิกในระบบปฏิบัติการ ... )
คลาสสาธารณะ myfile {บูลีนผันแปรส่วนตัว canWrite = true; ชื่อไฟล์สตริงส่วนตัว; public myFile (ชื่อไฟล์สตริง) {this.filename = filename; } โมฆะสาธารณะ writedata (ข้อมูลสตริง) {ในขณะที่ (! canWrite) {ลอง {thread.sleep (100); } catch (interptedException IE) {} // คุณสามารถตั้งค่าเวลาเขียนหมดเวลา} canWrite = false; // ตอนนี้เขียนไฟล์ canWrite = true; -ด้านบนเป็นวิธีแก้ปัญหาสำหรับ Java โดยเฉพาะการเขียนไฟล์ คุณได้เรียนรู้แล้วหรือยัง? คุณสามารถอ้างถึงบทความอื่น ๆ เพื่อเรียนรู้และเข้าใจ