English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В некоторых случаях при чтении содержимого файла, в котором достигается конец файла, вызывается исключение EOFException.
В частности, при чтении данных с помощью объекта Input поток, это исключение выбрасывается. В других случаях при достижении конца файла выбрасывается определенное значение.
В классе 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