Reading files in Java

0
public static void loadfile(stock []a) throws IOException{

        String fich;
        File fichDad;
        int i=countDatas(a);

        while(sc.nextLine().length()!=0);
        do{
            System.out.print("\nQual é o nome do ficheiro que deseja ler?\n");
            fich=sc.nextLine();
            fichDad = new File(fich);
        }while(!fichDad.canRead()||!fichDad.exists()||!fichDad.isFile());

        Scanner lerFil = new Scanner (fichDad);

        while (lerFil.hasNextLine()){
            if(i==100) break;
            if(!lerFil.hasNext()) break;; 

            a[i]=new stock();
            a[i].nome=lerFil.next();
            a[i].quant=lerFil.nextInt();
            i++;
        }

        System.out.print("\n\n\nValores inseridos com sucesso!\n\n\n\n");

        lerFil.close();

}

I'm doing an exercise that consists of a program (in Java) for stock maintenance in a store. The program is working, but there is a "problem" that I can not solve. The program does all the operations correctly and then the progress made can be saved in a file, which can then be read and loaded into the program to resume progress. However, if you read the file twice in a row, instead of deleting what you have in memory and typing it over, the function displays twice the contents of the file. Does anyone have a solution?

    
asked by anonymous 15.03.2018 / 17:13

1 answer

0

You can rewrite your Stock class like this:

import java.io.File;
import java.io.Scanner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Stock {
    private final String nome;
    private final int quantidade;

    public Stock(String nome, int quantidade) {
        this.nome = nome;
        this.quantidade = quantidade;
    }

    public String getNome() {
        return nome;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public static List<Stock> loadFile(Scanner sc) throws IOException {
        // Limpa o sc.
        while (!sc.nextLine().isEmpty());

        File ficheiro;
        do {
            System.out.print("\nQual é o nome do ficheiro que deseja ler?\n");
            String nomeFicheiro = sc.nextLine();
            ficheiro = new File(nomeFicheiro);
        } while (!ficheiro.exists() || !ficheiro.isFile() || !ficheiro.canRead());

        List<Stock> lista = new ArrayList<>();
        try (Scanner leitor = new Scanner(ficheiro)) {
            for (int i = 0; i < 100 && leitor.hasNext(); i++) {
                String nome = leitor.next();
                int quantidade = leitor.nextInt();
                Stock s = new Stock(nome, quantidade);
                lista.add(s);
            }
        }

        System.out.println("Valores inseridos com sucesso!");

        return lista;
    }
}

Note that it will always return a new list of Stock containing the contents of the file. Use the try-with-resources and follow Code Conventions .

To replace the list, just do this:

Scanner sc = new Scanner(System.in);

// Primeira vez.
List<Stock> lista = Stock.loadFile(sc);

// ...Um monte de código aqui...

// Segunda vez.
lista = Stock.loadFile(sc);
    
15.03.2018 / 17:59