Java - Verificar se um ficheiro de texto está vazio

d3baser

Power Member
Heys,
Eu tenho um programa que vai ter de ler e guardar informação num ficheiro de texto.
Quando o programa se inicia vai ter de ler o que está no ficheiro e quando eu o quiser desligar ele vai ter de guardar tudo no ficheiro.
Essa parte está toda a funcionar perfeitamente, a minha dúvida é como é que eu verifico se o ficheiro tem lá dados? Porque ao que parece, se o ficheiro estiver vazio ele dá-me erro por eu estar a tentar ler algo que não existe...

Neste momento esse pedaço de código está assim:
Código:
        String input;
        
        input=s.nextLine();
        if (input == null) 
            numCont=0;
        else {
            numCont= s.nextInt();
        }
o numCont é uma variavel que serve para um while que o programa vai ter de fazer quando estiver a ler os dados. Se não estiver lá nada então o numCont é 0 e o programa não executa o while, se o ficheiro tiver lá alguma coisa então ele vai executar o while conforme o numero que estiver no inicio do programa.

Ele neste momento não faz nada. Corre sem dar erros, mas não apresenta o menu (teoricamente há um menu) que devia ser o primeiro sinal de vida dele :\

EDIT: já dá sinal de vida, tinha uma cena mal. estava in.nextLine() e devia ser s.nextLine(). Agora dá este erro:
Código:
 Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at Main.main(Main.java:47)

Que é o erro que dá quando não está nada no ficheiro.
 
Última edição:
Podes apanhar a excepção e avisar o utilizador.
Usa o:
Código:
try { 

String input;
input=s.nextLine();

if (input == null) 
   numCont=0;
else
    numCont= s.nextInt();
} 
catch (NoSuchElementException e)  { 
  System.err.println("O ficheiro nao tem dados");
}
 
Ok, thanks :)

Entretanto descubri outra maneira :p

Código:
 File lista2 = new File("lista.txt");

if (lista2.length()==0) {
            numCont=0;
        }
        else 
            numCont=s.nextInt();

Mais uma vez, obrigado :)
 
Back
Topo