1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Escrever em arquivo com FileOutputStream

Estou tentando fazer um programa que escreva em um arquivo já existente, mas SEM APAGAR O QUE JÁ TEM NELE, e depois ler esse arquivo. O problema é que ele está limpando o arquivo na hora de escrever.

Obs: Eu alterei meu código, está assim agora. Mas continuo tendo o problema de ele não gravar o ultimo texto digitado. Se eu digito 4 ele só grava 3. E também fica aparecendo um null antes de printar o nome.

public static void gravaDados() throws IOException {
    String nome = "";
    double saldo;
    int i = 0;

    /*-----------------------------------------------------------------------*/
    //aqui eu preencho o arraylist para depois escrever no arquivo

    ArrayList<ContaArquivo> dadosCliente = new ArrayList<ContaArquivo>();

    int qtd = Integer.parseInt(JOptionPane
            .showInputDialog("Quantos clientes deseja adcionar? "));

    for (int y = 0; y <= qtd; y++) {
        i++;
        nome = JOptionPane.showInputDialog("Digite o nome do cliente: ");

        saldo = Double.parseDouble(JOptionPane
                .showInputDialog("Digite o saldo: "));

        ContaArquivo cliente = new ContaArquivo();
        cliente.nome1 = nome+"";
        cliente.saldo1 = saldo;
        cliente.codigo1 = i;
        dadosCliente.add(cliente);

    }
    // aqui eu abro o arquivo e gravo o arraylist
    String caminho = "C:/Documents and Settings/silas.santos/Desktop/CriarArquivo/Conta.txt";
    BufferedReader br = new BufferedReader(new FileReader(caminho));

    StringBuilder sb = new StringBuilder();
    String text =  br.readLine();

     for (ContaArquivo x : dadosCliente) {
            sb.append(text + "\r\n" 
                + "Codigo do cliente:" + x.codigo1 +"\n\r"
                    + "Nome: "+ x.nome1.toString() + "\r\n"
                    + "Saldo: "+String.format("R$ %.2f", x.saldo1) + "\r\n"
                    + "\n\r");

            br.close();

            escrevaEmArquivo(caminho, sb.toString()); //Encapsulado em método

        }


}


    /*-----------------------------------------------------------------------*/
private static void escrevaEmArquivo(String caminho, String valor) throws IOException {

    FileOutputStream fos = new FileOutputStream(caminho,true); //O parâmetro true permite append de dados
    try {
        fos.write(valor.getBytes()); //Escreve no objeto
        fos.flush(); //Persiste no arquivo

    } finally {
        //try catch para tratar exclusivamente o método close.
        try {
            //Fecha o arquivo (esta ação É necessária e deverá ser 
            //executada não importa que exceções ocorram)

            fos.close(); 

        } catch (IOException ioex) {
            //Erro no fechamento do arquivo. Não há porque subir esta exceção... Apenas trate-a
        }}

    }


public static void lerDados() {

    /* LEITURA DO ARQUIVO */
    String mostra = "";
    String nomeArq = "C:/Documents and Settings/silas.santos/Desktop/CriarArquivo/Conta.txt"; // Nome
                                                                                                // do
                                                                                                // arquivo,

    // pode ser absoluto, ou pastas /dir/teste.txt
    String linha = "";
    File arq = new File(nomeArq);

    // Arquivo existe
    if (arq.exists()) {

        // tentando ler arquivo
        try {
            mostra += "Lista de Clientes:\n\n";
            // abrindo arquivo para leitura
            FileReader reader = new FileReader(nomeArq);
            // leitor do arquivo
            BufferedReader leitor = new BufferedReader(reader);
            while (true) {
                linha = leitor.readLine();
                if (linha == null)
                    break;
                mostra += linha + "\n\r";
            }
        } catch (Exception erro) {
        }
        JOptionPane.showMessageDialog(null, mostra, "Arquivo" + "...", 1);
    }
    // Se nao existir
    else
        JOptionPane.showMessageDialog(null, "Arquivo nao" + " existe!",
                "Erro", 0);
}

}

Alguém sabe o que há de errado?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.