EOFException

3 respostas
java
S

Ta dando java.io.EOFException que pelo que pesquisei é quando passa da quantidade de bytes do arquivo, eu ainda não entendi bem, pois to estudando agr sobre isso

Aqui ta o código:

public final class Testes{

static FileOutputStream arquivoOut;

static FileInputStream arquivoIn;

static DataOutputStream gravar;

static DataInputStream ler;
public static void main(String[] args) throws IOException {
    lerDados();
    lerProximoDado();
}
public static void gravarDados(String dado) throws FileNotFoundException, IOException {
    arquivoOut = new FileOutputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    gravar = new DataOutputStream(arquivoOut);
    gravar.writeUTF(dado);
    arquivoOut.close();
}
public static void lerDados() throws FileNotFoundException, IOException {
    arquivoIn = new FileInputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    ler = new DataInputStream(arquivoIn);
    System.out.println(ler.readUTF());
    arquivoIn.close();
}
public static void lerProximoDado() throws FileNotFoundException, IOException {
    arquivoIn = new FileInputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    ler = new DataInputStream(arquivoIn);
    System.out.println(ler.read());
    while(ler.read() != -1) {
        System.out.println(ler.readUTF());
    }
}

}

O arquivo já existe, eu havia criado antes, então comecei a fazer alguns testes pra entender melhor sobre o assunto.

O erro ta dando na seguinte linha dentro do while :

System.out.println(ler.readUTF());

3 Respostas

S

É que você já está lendo o arquivo antes e durante o condicional do laço, eventualmente é lido o último byte no condicional e aí vai lançar exceção no readUTF().

Troque este código:

System.out.println(ler.read());
while(ler.read() != -1) {
    System.out.println(ler.readUTF());
}

Por este:

String texto = null;
while ( (texto = ler.readUTF()) != null ) {
    System.out.println(texto);
}
S

Eu não entendi muito bem, para que serve o read() então?

S

O read() serve para você ler um único byte.

https://docs.oracle.com/javase/10/docs/api/java/io/InputStream.html#read()

Criado 23 de junho de 2018
Ultima resposta 24 de jun. de 2018
Respostas 3
Participantes 2