Data does not persist in txt file

Asked

Viewed 167 times

1

Good morning, I’m having a question, I have this code, which is a contact book and the data should be persisted in a txt file. What happens is that the program runs normally, but the data is not saved in that file, which I stored in a folder located on disk c, Someone could give me a light?

package agenda.estruturada;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author Yure
 */
public class AgendaEstruturada {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    //Instanciando a classe ArrayList para uso
    ArrayList<String>agenda = new ArrayList<String>();
    //Instanciando a Classe Scanner
    Scanner ler = new Scanner(System.in);
    //Opção que será passada pelo usuário na escolha do menu
    int opcao;

            importar(agenda);//importando os dados

    do{
        System.out.println("***** Menu Principal *****");
        System.out.println("[1] Incluir Contato");
        System.out.println("[2] Excluir Contato");
        System.out.println("[3] Listar Contatos");
        System.out.println("[4] Pesquisar Contatos");
        System.out.println("[0] Encerrar Programa\n");

        opcao = ler.nextInt();

            switch(opcao){
                    case 1:incluir(agenda);break;
                    case 2:excluir(agenda);break;
                    case 3:listar(agenda);break;
                    case 4:pesquisar(agenda);break;
        }
        System.out.println("\n");
    }while(opcao!=0);
            exportar(agenda);//Exportando os dados
    }

               /**Método que irá importar os dados para Lista*/
                public static void importar(ArrayList<String>agenda){
                        try{
                            FileReader arq = new FileReader("C:\\Agenda\\agenda.txt");
                            BufferedReader lerArq = new BufferedReader(arq);
                            String linha = lerArq.readLine();//lê a primeira linha
                            // a variável "linha" recebe o valor "null" quando o processo 
                            // de repetição atingir o final do arquivo texto
                                while(linha!=null){
                                    agenda.add(linha);
                                    linha = lerArq.readLine();// lê da segunda até a última linha
                                }

                                arq.close();


                        }catch(IOException err){
                              System.err.printf("Erro na cobertura do arquivo %s.",err.getMessage());                       
                        }
                }
                /**Método para buscar os dados da lista*/
                public static void exportar(ArrayList<String>agenda) throws IOException{
                    FileWriter arq = new FileWriter("C:\\Agenda\\agenda.txt");
                    PrintWriter gravarArq = new PrintWriter(arq);

                    int i;
                    int n = agenda.size();

                            for(i=0;i<n;i++){
                                gravarArq.printf("%s%n"+ agenda.get(i));
                            }
                gravarArq.close();
                }


                    public static void incluir(ArrayList<String>agenda){
                        Scanner ler = new Scanner(System.in);
                        String nome, telefone;

                        System.out.printf("|informe o nome do contato\n");
                        nome = ler.nextLine();

                        System.out.printf("|informe o telefone do contato\n");
                        telefone = ler.nextLine();

                        //Grava os dados no fim da lista
                        agenda.add(nome + ":" + telefone);   
                    }

                    public static void excluir(ArrayList<String>agenda){
                        Scanner ler = new Scanner(System.in);
                        int i;

                        listar(agenda);

                        System.out.printf("\nInforme o indice da posição a ser excluida\n");
                        i = ler.nextInt();

                        try{
                           agenda.remove(i);
                        }catch(IndexOutOfBoundsException err){
                        // exceção lançada para indicar que um índice (i) 
                        // está fora do intervalo válido (de 0 até agenda.size()-1)
                            System.out.printf("\nErro: Posição inválida(%s).\n\n", err.getMessage());
                        }
                    }

                    public static void listar(ArrayList<String>agenda){
                        System.out.printf("\nListando os itens da agenda\n");
                        int i, n = agenda.size();

                        for (i=0;i<n;i++){
                            System.out.printf("Posição %d- %s\n",i,agenda.get(i));
                        }
                        System.out.printf("--------------------------------------------------");
                    }

                    public static void pesquisar(ArrayList<String>agenda){
                        Scanner ler = new Scanner(System.in);
                        String s;

                        System.out.printf("\nInforme o nome do contato\n");
                        s = ler.nextLine();
                        s = s.toUpperCase();
                        String dados[];

                        int i, n = agenda.size();

                            for(i = 0;i<n;i++){
                                // informando "joão", por exemplo, na entrada serão mostrados 
                                // todos os contatos que possuem "joão" no nome

                                if(agenda.get(i).toUpperCase().indexOf(s)!=-1){
                                  dados = agenda.get(i).split(":");

                                    System.out.printf("\nNome....:%s\n",dados[0]);
                                    System.out.printf("\nTelefone:%s\n",dados[1]);
                                }

                            }
                    }
}
  • 1

    In the builder of Filewriter , you need to inform a true so that the content is appended to the existing content.

  • 1

    Strip that throws of the main method and makes the try/catch

  • It didn’t work, I put true in the Filewriter constructor and replaced throws with Try/catch, but it doesn’t persist yet.

  • It is not to persist, if you do the try/catch you can capture possible exceptions. e.printStackTrace();

2 answers

1

Follow the hint ..

Use an apache-Com lib ". jar" . This lib has a function for you to add data within a java.io.File. Example:

java.io.File agendatxt = new java.io.File("agenda.txt");

if(!agendatxt.exists()) agendatxt .createNewFile();

FileUtils.writeStringToFile(agendatxt , "nome="+nome+"| contato="+fone, true);
  • Thank you to all who are willing to respond!!

1


Your problem is in the call of the export method, it will only be executed if the option is equal to 0 because it is at the end of the do while. You can call it after entering the data, it would be something like this:

public static void incluir(ArrayList<String> agenda) {
        Scanner ler = new Scanner(System.in);
        String nome, telefone;

        System.out.printf("|informe o nome do contato\n");
        nome = ler.nextLine();

        System.out.printf("|informe o telefone do contato\n");
        telefone = ler.nextLine();

        agenda.add(nome + ":" + telefone);
        exportar(agenda);
}

I made some changes to your export method:

 /** Método para buscar os dados da lista */
    public static void exportar(ArrayList<String> agenda) {
        FileWriter arq = null;
        try {
            arq = new FileWriter("C:\\Agenda\\agenda.txt");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        PrintWriter gravarArq = new PrintWriter(arq);

        int i;
        int n = agenda.size();

        for (i = 0; i < n; i++) {
            gravarArq.printf(agenda.get(i));
            gravarArq.printf("\r\n");
        }
        gravarArq.close();
    }

Or if you prefer you can call him inside the case:

switch (opcao) {
    case 1:
      incluir(agenda);
      exportar(agenda);
      break;
    ...
  • Oops, thank you very much, it worked perfectly!!

  • 1

    The old way also worked, but the data was only persisted when you finished the program with option 0

Browser other questions tagged

You are not signed in. Login or sign up in order to post.