تشرح هذه المقالة 5 طرق لحل كتابة الملفات الحصرية Java ، بما في ذلك بعض فهمك. إذا كان هناك أي عدم ملاءمة ، فأنت مرحب بك لاقتراحه.
الحل 1: استخدام خيار تشغيل ملفات RandomAccessFile ، يعني الكتابة في وضع قفل المزامنة
ملف RandomAccessFile = new RandomAccessFile (ملف ، "RWS") ؛
الحل 2: استخدم قفل ملف FileChannel
ملف الملف = ملف جديد ("test.txt") ؛ fileInputStream fis = جديد fileInputStream (ملف) ؛ قناة fileChannel = fis.getChannel () ؛ fileLock fileLock = null ؛ بينما (صواب) {fileLock = Channel.Trylock (0 ، long.max_value ، false) ؛ . آخر // هناك خيوط أخرى تشغل قفل النوم (1000) ؛} الحل 3: أولاً اكتب المحتوى المراد كتابته في ملف مؤقت ، ثم قم بتغيير اسم الملف المؤقت (يستخدم مخطط الاختراق مبدأ التخزين المؤقت + العملية الذرية )
الفئة العامة myfile {private string filename ؛ public myfile (اسم ملف السلسلة) {this.filename = filename ؛ } rectedata (بيانات السلسلة) المتزامنة العامة (بيانات السلسلة) يلقي ioException {String tmpfilename = uuid.randomuuid (). toString ()+". tmp" ؛ ملف tmpfile = ملف جديد (tmpfilename) ؛ filewriter fw = filewriter جديد (tmpfile) ؛ fw.write (البيانات) ؛ fw.flush () ؛ fw.close () ؛ // الآن أعد تسمية ملف temp إلى الاسم المطلوب ، هذه العملية هي العملية الذرية ضمن معظم نظام التشغيل if (! tmpfile.renameto (اسم الملف) {// قد نرغب في إعادة إعادة المحاولة إذا فشل التحرك في رمي iOexception جديد ("Move Fails") ؛}}}} الحل 4: تغليف الملف وفقًا لمسار الملف واستخدم المزامنة للتحكم في كتابة الملف
الفئة العامة myfile {private string filename ؛ public myfile (اسم ملف السلسلة) {this.filename = filename ؛ } rectedata (بيانات السلسلة) المزامنة العامة (بيانات السلسلة) يلقي ioException {filewRiter fw = new filewRiter (filename) ؛ fw.write (البيانات) ؛ fw.flush () ؛ fw.close () ؛ }} الخطة 5: خطة توصلت إلى نفسي ليست دقيقة للغاية. من خلال التبديل إلى ضبط التحكم في القراءة والكتابة ، قم بمحاكاة إعداد علامة قابلة للكتابة (تحولت إلى مشكلة قراءة كلاسيكية وكتابة في نظام التشغيل ...)
الطبقة العامة myfile {private folatile boolean canwrite = true ؛ اسم الملف الخاص بالسلسلة ؛ public myfile (اسم ملف السلسلة) {this.filename = filename ؛ } public void writedata (سلسلة بيانات) {بينما (! canwrite) {try {thread.sleep (100) ؛ } catch (interuptedException ie) {} // يمكنك تعيين مهلة وقت الكتابة} canwrite = false ؛ // الآن اكتب ملف Canwrite = true ؛ }}ما سبق هو الحل لجافا كتابة الملفات حصريًا. هل تعلمت ذلك؟ يمكنك الرجوع إلى مقالات أخرى لتعلمها وفهمها.