حل مشكلات قراءة الملفات وكتابتها في Java: دليل تصحيحي
في البداية، يتعين عليك فحص الكود الذي قدمته بحذر لتحديد الأخطاء والمشكلات التي قد تكون سببًا في ظهور الأخطاء. يبدو أن هناك عدة نقاط يجب مراجعتها في الكود الخاص بك.
أولًا، يجب أن تعلم أن دالة readLine()
في BufferedReader
تقوم بقراءة سطر واحد فقط من الملف في كل مرة. لذا، يجب عليك تخزين السطور المقروءة في متغير ثم استخدامها لاحقًا. في الوقت الحالي، تقوم بقراءة السطر وتقوم بتجاوزه فورًا دون استفادة من المحتوى.
-
تنفيذ عد تنازلي بسيط في تطبيق Android Studio31/01/2024
-
حلول لأخطاء كمية الطلب في برنامج Java للطلاب03/02/2024
-
تنفيذ سكريبتات Bash باستخدام Java03/04/2024
تعتمد على readLine()
للتحقق من نهاية الملف، لكن يجب أيضًا مراعاة التحقق من قيمة null
بشكل منفصل.
بالإضافة إلى ذلك، يجب أن تتحقق من وجود الملف “marc21.txt” وأن تتأكد من أن الملف قابل للقراءة. يمكن أن يكون عدم وجود الملف أو عدم قدرة البرنامج على قراءته سببًا آخر في الأخطاء.
علاوة على ذلك، يجب تصحيح بعض الأخطاء النحوية في الكود. على سبيل المثال، يجب عليك استخدام bw.close()
بعد الانتهاء من الحلقة while
وليس داخلها، لضمان أن تكون الكتابة في الملف قد اكتملت بشكل صحيح.
إليك تصحيح لبعض النقاط المشار إليها:
javapublic static void main(String[] args) throws IOException {
String file = "marc21.txt";
String line;
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("marc22.txt")));
while ((line = br.readLine()) != null) {
// obtaining first five characters of file
String substring = line.substring(0, 4);
// converting substring to integer
int x = Integer.parseInt(substring);
System.out.println("x is " + x);
// taking record to marc21 to another file marc22
bw.write(line.substring(0, x));
bw.write("\n");
}
// close the BufferedWriter outside the loop
bw.close();
// close the BufferedReader
br.close();
}
تأكد من تحليل هذا الكود بعناية وتعديله وفقًا لاحتياجاتك ومتطلبات برنامجك.
المزيد من المعلومات
من خلال النظر إلى الكود الذي قدمته، يظهر أن هناك عدة مشاكل قد تؤدي إلى حدوث أخطاء في تنفيذ البرنامج. سأقوم بتحليل الكود وتقديم بعض الإقتراحات لتصحيح الأخطاء المحتملة.
أولًا، يبدو أن هناك خطأ في استخدام دالة readLine()
حيث يجب حفظ السطر الذي تم قراءته في متغير لاحقاً. لذا، يُفضل تخزين السطر المقروء في متغير لاستخدامه لاحقاً.
أيضًا، يجب وضع الجزء الخاص بإغلاق BufferedWriter (bw.close()
) خارج الحلقة while. إذا قمت بإغلاقها داخل الحلقة، فإنها ستُغلق في كل تكرار، وهذا قد يؤدي إلى مشاكل في كتابة الملف.
علاوة على ذلك، يجب التأكد من أن الملف “marc21.txt” متاحًا وموجودًا في المسار الصحيح.
إليك نسخة من الكود مع التصحيحات المقترحة:
javaimport java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
String file = "marc21.txt";
String line;
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("marc22.txt")));
while ((line = br.readLine()) != null) {
// obtaining first five characters of line
String substring = line.substring(0, 4);
// converting substring to integer
int x = Integer.parseInt(substring);
System.out.println("x is " + x);
// taking record to marc21 to another file marc22
bw.write(line.substring(0, x));
bw.write("\n");
}
// close the BufferedWriter outside the loop
bw.close();
br.close();
}
}
يرجى مراجعة هذا التعديل وتجربة تشغيل البرنامج مرة أخرى. إذا كانت لديك أية أسئلة إضافية أو مشاكل، فلا تتردد في طرحها.