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

Como ler até o final do DataInputStream no Java sem capturar EOFException?

Em alguns casos, ao ler o conteúdo do arquivo, nesse caso, ao chegar ao final do arquivo, será lançada uma exceção EOFException.

Especialmente, ao usar objetos de fluxo de entrada para ler dados, essa exceção é lançada. Em outros casos, ao chegar ao final do arquivo, será lançada uma exceção específica.

Na classe DataInputStream, ela fornece várias métodos, comoreadboolean(),readByte(),readChar()etc. Valores originais lidos. Quando você usa esses métodos para ler dados do arquivo, ao chegar ao final do arquivo, será lançada uma exceção EOFException.

Exemplo

O seguinte programa demonstra como lidar com EOFException no 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 {
      //Lendo dados do usuário
      Scanner sc = new Scanner(System.in);
      System.out.println("Digite uma String: ");
      String data = sc.nextLine();
      byte[] buf = data.getBytes();
      //Escreva no arquivo
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt"));
      for (byte b : buf) {
         dos.writeChar(b);
      }
      dos.flush();
      //Lendo do arquivo criado acima usando o método readChar()
      DataInputStream dis = new DataInputStream(new FileInputStream("D:\\data.txt"));
      while(true) {
         char ch;
         ch = dis.readChar();
         System.out.print(ch);
      }
   }
}

Resultado da Saída

Digite uma String:
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)

ler DataInputStream sem capturar a exceção

Você não pode usarDataInputStreamA classe lê o conteúdo do arquivo até não chegar ao final do arquivo. Se necessário, você pode usar outras subclasses da interface InputStream.

Exemplo

Neste exemplo, usamos a classe FileInputStream em vez de DataInputStream para reescrever o programa acima, para ler dados do arquivo.

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 {
      //Lendo dados do usuário
      Scanner sc = new Scanner(System.in);
      System.out.println("Digite uma String: ");
      String data = sc.nextLine();
      byte[] buf = data.getBytes();
      //Escreva no arquivo
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt"));
      for (byte b : buf) {
         dos.writeChar(b);
      }
      dos.flush();
      //Lendo do arquivo criado acima usando o método 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("conteúdo do arquivo: ");+new String(b));
   }
}

Resultado da Saída

Digite uma String:
Hello how are you
conteúdo do arquivo: H e l l o h o w a r e y o u
Você pode gostar também