Quando trabalhamos com leitura e escrita de arquivos em Java, é comum lidar com fluxos de dados (InputStream
, Reader
, etc.). Uma exceção bastante conhecida nesse contexto é a java.io.EOFException
, que acontece quando o programa tenta ler além do fim do arquivo (EOF – End Of File).
Na prática, isso significa que você pediu mais dados do que realmente existem. Esse erro aparece bastante quando usamos classes como DataInputStream
ou ObjectInputStream
.
Exemplo prático
Imagine que temos um arquivo binário com números inteiros gravados. Vamos tentar ler esses dados:
import java.io.*;
public class ExemploEOF {
public static void main(String[] args) {
File arquivo = new File("numeros.dat");
try (DataOutputStream out = new DataOutputStream(new FileOutputStream(arquivo))) {
// escrevendo alguns números
out.writeInt(10);
out.writeInt(20);
out.writeInt(30);
} catch (IOException e) {
e.printStackTrace();
}
try (DataInputStream in = new DataInputStream(new FileInputStream(arquivo))) {
while (true) {
int numero = in.readInt();
System.out.println("Número lido: " + numero);
}
} catch (EOFException e) {
e.printStackTrace();
System.out.println("Fim do arquivo alcançado." );
} catch (IOException e) {
e.printStackTrace();
}
}
}
O que acontece aqui?
- Primeiro gravamos três inteiros em um arquivo.
- Depois, ao ler, usamos um
while(true)
. - Quando o último número é lido, a próxima chamada a
readInt()
tenta buscar algo que não existe. É aí que o Java lança aEOFException
. - Como tratamos a exceção, o programa entende que chegou ao fim do arquivo e finaliza a leitura com segurança.
Conclusão
A EOFException
não significa necessariamente um erro grave: ela é apenas um aviso de que não há mais dados para serem lidos. A forma correta de lidar com isso é prever esse cenário, tratando a exceção ou controlando melhor o fluxo de leitura.