English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في بعض الحالات عند قراءة محتويات الملف، وفي هذه الحالة وصول نهاية الملف، يتم إصدار EOFException.
خاصة، يتم إصدار هذه الاستثناء عند قراءة البيانات باستخدام كائن Input Stream. في الحالات الأخرى، يتم إصدار قيمة محددة عند وصول نهاية الملف.
في كلاس DataInputStream، يقدم عدة طرق مثلreadboolean()
,readByte()
,readChar()
وغيرها من القيم الأصلية التي يتم قراءتها. يتم إصدار EOFException عند وصول نهاية الملف عند استخدام هذه الطرق لقراءة البيانات من الملف.
يوضح البرنامج التالي كيفية التعامل مع EOFException في Java.
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; public class AIOBSample {}} public static void main(String[] args) throws Exception { //قراءة من المستخدم Scanner sc = new Scanner(System.in); System.out.println("ادخل نصاً:"); String data = sc.nextLine(); byte[] buf = data.getBytes(); //كتابة إلى الملف DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt")); for (byte b : buf) { dos.writeChar(b); } dos.flush(); //قراءة من الملف المحدد أعلاه باستخدام طريقة readChar() DataInputStream dis = new DataInputStream(new FileInputStream("D:\\data.txt")); while(true) { char ch; ch = dis.readChar(); System.out.print(ch); } } }
نتيجة الإخراج
ادخل نصاً: hello how are you helException in thread "main" lo how are youjava.io.EOFException at java.io.DataInputStream.readChar(Unknown Source) at MyPackage.AIOBSample.main(AIOBSample.java:27)
لا يمكنك استخدامDataInputStreamيقرأ الكلاس محتويات الملف حتى وصول نهاية الملف. يمكن استخدام فروع أخرى من واجهة InputStream إذا لزم الأمر.
في المثال التالي، نستخدم كلاس FileInputStream بدلاً من DataInputStream لإعادة كتابة البرنامج المذكور أعلاه لقراءة البيانات من الملف.
import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; public class AIOBSample {}} public static void main(String[] args) throws Exception { //قراءة من المستخدم Scanner sc = new Scanner(System.in); System.out.println("ادخل نصاً:"); String data = sc.nextLine(); byte[] buf = data.getBytes(); //كتابة إلى الملف DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt")); for (byte b : buf) { dos.writeChar(b); } dos.flush(); //قراءة من الملف المحدد أعلاه باستخدام طريقة readChar() File file = new File("D:\\data.txt"); FileInputStream fis = new FileInputStream(file); byte[] b = new byte[(int) file.length()]; fis.read(b); System.out.println("محتويات الملف: " + new String(b)); } }
نتيجة الإخراج
ادخل نصاً: Hello how are you محتويات الملف: H e l l o h o w a r e y o u