استخدام ملفات النص
| English | العربية |
|---|---|
| text file/tekst faɪl/ | ملف نصي |
السطر الفارغ ليس رمزًا غير صالح
- يحتوي ملف نصي على سطر فارغ يتبعه
12. في البداية، كلاhasNextLine()وhasNextInt()صحيحان: فحص الرمز الصحيح يتخطى المسافات البيضاء، بما في ذلك السطر الفارغ، للعثور على 12. - قارن ملفًا يحتوي على
oopsيليه12: يحتوي على سطر آخر، لكن رمزه التالي ليس رقمًا صحيحًا. لا يمكن لفحص وجود سطر أن يحدد تنسيق الأرقام الصحيحة؛ اختر حماية تتوافق مع عملية القراءة.
مع الفاصل الافتراضي، Scanner يحتوي على سطر فارغ يليه 12، سيُرجع hasNextInt() قيمة true في البداية.
يتخطي فحص الرمز الصحيح المسافات البيضاء، بما في ذلك السطر الفارغ، ويجد الرمز الصحيح 12.
ربط القارئ بمصدره
new Scanner(new File("scores.txt"))يقرأ الملف المسمى، بينماnew Scanner(System.in)يقرأ مدخلات لوحة المفاتيح. كلاهما يكشف عن نفس طرق Scanner؛ المصدر وتوافره يختلفان.- فتح ملف مفقود يمكن أن يُثير
FileNotFoundException. المثال الكامل أدناه يعلنه علىmain؛ يمكن لتطبيق حقيقي بدلاً من ذلك التقاطه والإبلاغ عن خطأ مفيد. لا يخلق أي من هذين الخيارين فقدان البيانات.
لقراءة ملف نصي، تقوم بإرفاق Scanner بـ...
new Scanner(new File("...")) يقرأ ملفًا.
نفس طرق الـ Scanner (nextInt, nextLine) تعمل لكل من لوحة المفاتيح وإدخال الملفات.
المصدر الوحيد المختلف هو (System.in مقابل File).
قراءة الأسطر الكاملة
hasNextLine()يفحص ما إذا كان هناك سطر آخر موجود دون استهلاكه؛nextLine()يستهلك الجزء المتبقي من ذلك السطر وفاصل الأسطر الخاص به. يمكن أن ينتج السطر الفارغ السلسلة الفارغة"".- بالنسبة للسجلات القائمة على الأسطر، استخدم
while (in.hasNextLine()) { String line = in.nextLine(); ... }. قرر صراحةً ما إذا كانت السجل الفارغ ذو معنى، أو يجب تجاهله، أو الإبلاغ عنه كغير صالح.
قراءة ملف نصي
اتبع الخطوات التي يتخذها البرنامج لقراءة ملف سطرًا تلو الآخر.
أي طريقة تتحقق مما إذا كان هناك سطر آخر للقراءة؟
يحمي hasNextLine() عملية قراءة nextLine().
يجب التحقق من hasNextLine() قبل كل استدعاء لـ nextLine().
القراءة ما بعد النهاية يتسبب في استثناء.
قراءة الرموز مع فحصات متطابقة
- فاصل الضعف الافتراضي لـ Scanner هو المسافة البيضاء.
hasNext()يفحص وجود رمز؛next()يستهلكه.hasNextInt()يفحص ما إذا كان الرمز التالي يمكن قراءته كرقم صحيح؛nextInt()يستهلك ذلك الرقم الصحيح. - يتوقف
while (in.hasNextInt())عندoops، حتى لو جاء 12 بعده. إذا كانت السياسة هي تخطي الرمزات غير الصالحة والاحتفاظ بالأرقام الصحيحة اللاحقة، فاستخدم حلقةhasNext()، وختبرhasNextInt()، واستهلك رمزًا غير صالح باستخدامnext().
يقوم هذا البرنامج الكامل بجمع الرمزات الصحيحة ويبلغ عن كل رمز تم تخطيه. بالنسبة لملف يحتوي على oops متبوعًا بـ 12، فإنه يطبع Skipped: oops ثم Total: 12. يفترض المثال أن المجموع يتسع لنوع int.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadScores {
public static void main(String[] args) throws FileNotFoundException {
int total = 0;
try (Scanner in = new Scanner(new File("scores.txt"))) {
while (in.hasNext()) {
if (in.hasNextInt()) {
total += in.nextInt();
} else {
System.out.println("Skipped: " + in.next());
}
}
}
System.out.println("Total: " + total);
}
}
Match each read to the guard that checks that kind of input.
A line-presence check is not an integer-format check.
استهلاك الإدخال وإطلاق الملف
- تستهلك كل فرع في حلقة الرمزات رمزًا واحدًا. إن التحقق المتكرر من رمز غير صالح دون استهلاكه يترك الممسح (Scanner) في نفس الموقع ويمكن أن يجعل الحلقة تدور إلى ما لا نهاية.
- يغلق كتلة try-with-resources هذا الممسح الخاص بالملف عند الخروج، بما في ذلك الخروج الاستثنائي. عند إدارته يدويًا، استدعِ
close()عند الانتهاء؛ لا تحل فحوصات الاستثناء محل إغلاق المورد.
hasNextLine() متبوعاً بـ nextInt() ليس شرط تطابق صالح. قد يسبب رمز غير صحيح عدد (non-integer token) InputMismatchException، ويبقى قراءة العدد الفاشلة في حالة التوفر. اختر ما إذا كنت ترفض الملف، أو تبين السجل، أو تتخطى الرمز صراحةً.
عند الانتهاء من قراءة ملف، يجب عليك...
in.close() يحرر الملف.
تحقق من سياسة البيانات قبل الحلقة
- بالنسبة للإدخال
8 oops 12، فإن حلقة تقرأ فقط طالماhasNextInt()ستجمّع 8 وتتوقف عندoops. تجمع سياسة التخطي والإبلاغ المعروضة 20. قد لا يعني وجود رمز غير متوقع بالضرورة أن الملف انتهى. - تجيب هذه السياسات عن أسئلة مختلفة. بالنسبة لمطلوب درجة لكل طالب، قد يؤدي التخطي الصامت لرمز سيء إلى عدم تطابق السجلات؛ لذا يفضل الإبلاغ عن ذلك السجل ورفعه بدلاً من اعتبار جميع الرمزات اللاحقة كدرجات قابلة للتبديل.
اختر بين قراءة الأسطر أو الرمزات بناءً على تنسيق الملف. تقوم الفحوصات بفحص الإدخال القادم دون استهلاكه؛ بينما تستهلك القراءات المطابقة استهلاكها. تعامل مع البيانات غير الصالحة بشكل صريح، وحرك كل فرع في الحلقة، وأغلق قارئ الملف.
بالنسبة للمدخل 8 oops 12، ما المجموع الذي يطبعه برنامج التخطي والإبلاغ الموضح؟
يقوم باستهلاك وإضافة 8، واستهلاك وإبلاغ oops، ثم استهلاك وإضافة 12. المجموع هو 20.