English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Как читать DataInputStream до EOF без перехвата EOFException в Java?

В некоторых случаях при чтении содержимого файла, в котором достигается конец файла, вызывается исключение 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 без перехвата исключений

Вы не можете использовать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
Основной учебник
Рекомендуется к просмотру