تحدد Java RandomAccessFile الموقع لتنفيذ قراءة الملفات والكتابة
RandomAccessFile ينتمي إلى فئة القراءة العشوائية. يمكنه تشغيل محتوى الملف نفسه بشكل عشوائي ويمكنه قراءة المحتوى وكتابةه في الموقع المحدد للملف ، وهو مريح للغاية في كثير من الحالات.
يتم استخدام RandomAccessFile للوصول إلى الملفات التي تحمل سجلات البيانات. يمكنك استخدام طريقة Seek () للوصول إلى السجلات والقراءة والكتابة. لا يجب أن يكون حجم هذه السجلات هو نفسه ؛ ومع ذلك ، يجب أن يكون حجمها وموقفها معروفة. ومع ذلك ، يقتصر هذا الفئة على ملفات التشغيل.
RandomAccessFile لا ينتمي إلى فئات InputStream و OutputStream. في الواقع ، بالإضافة إلى تنفيذ واجهات Datainput و DataOutput (DatainputStream و DataOutputStream أيضًا ، لا علاقة له بهذه الفئتين ، ولا يستخدم حتى أي وظائف موجودة بالفعل في فئات InputStream و Outdustream ؛ إنها فئة مستقلة تمامًا ، وجميع الأساليب (في الغالب تنتمي إلى نفسها) مكتوبة من الصفر. قد يكون هذا لأن RandomAccessFile يمكن أن يتحرك ذهابًا وإيابًا في الملف ، وبالتالي فإن سلوكه يختلف اختلافًا أساسيًا إلى حد ما عن فئات الإدخال/الإخراج الأخرى. باختصار ، إنها فئة منفصلة ترث كائن مباشرة.
في الأساس ، تتمثل طريقة عمل RandomAccessFile في الجمع بين DatainputStream و DataOutputStream ، وإضافة بعض أساليبها الخاصة ، مثل getFilePointer () لتحديد المواقع ، والبحث () للتحرك في الملف ، وتحديد الطول () لحجم الملف ، و Skipbytes () للتخطي. بالإضافة إلى ذلك ، يحتوي مُنشئه أيضًا على معلمة تشير إلى ما إذا كان سيتم فتح الملف في وضع القراءة فقط ("R") أو وضع القراءة والكتابة ("RW") (تمامًا مثل FOPEN () C). لا يدعم كتابة الملفات فقط.
فقط RandomAccessFile لديه طريقة بحث Seek ، وهذه الطريقة قابلة للتطبيق فقط على الملفات. يحتوي BufferEdInputStream على طريقة Mark () ، والتي يمكنك استخدامها لتعيين العلامة (حفظ النتيجة في متغير داخلي) ، ثم استدعاء إعادة تعيين () للعودة إلى هذا الموقف ، ولكن وظيفتها ضعيفة للغاية وليست عملية للغاية.
رمز المثال:
استيراد java.io.ioException ؛ استيراد java.io.randomaccessfile ؛/** * RandomAccessFile ينتمي إلى فئة قراءة عشوائية ويمكنه تشغيل محتوى الملف نفسه بشكل مباشر وعشوائي ، بمعنى أنه يمكنك تحديد الموقع * crite [] يقرأ()؛ } public static void write () يلقي iOexception {// الوصول إلى الملف بطريقة قراءة عشوائية RAF = new RandomAccessFile ("d: //test.txt" ، "rw") ؛ raf.writeBytes ("Hello World!") ؛ raf.writeboolean (صواب) ؛ raf.writeint (30) ؛ Raf.WriteDouble (3.56) ؛ raf.close () ؛ } public static void read () remrows ioException {randomaccessfile raf = new RandomAccessFile ("d: //test.txt" ، "r") ؛ raf.seek (12) ؛ // اضبط موقف المؤشر المنطقي Booleanvalue = raf.readboolean () ؛ int intvalue = raf.readint () ؛ doublevalue = raf.readdouble () ؛ raf.seek (0) ؛ // اضبط موضع المؤشر على بداية الملف البايت [] بايت = بايت جديد [12] ؛ لـ (int i = 0 ؛ i <bytes.length ؛ i ++) bytes [i] = raf.readbyte () ؛ // اقرأ بايت في وقت واحد وتعيينه إلى bytes [i] StringValue = new string (bytes) ؛ raf.skipbytes (1) ؛ // تخطي بايت بايت int intvalue2 = raf.readint () ؛ raf.close () ؛ System.out.println (BooleAnvalue) ؛ System.out.println (Intvalue) ؛ system.out.println (doublevalue) ؛ System.out.println (StringValue) ؛ System.out.println (Intvalue2) ؛ }}شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!