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