Como escrever em arq.txt por processo while?

Ola pessoal, como consigo manter uma string salva em um arquivo “txt”, porem o processo não consigo monta-lo por “for”.
Processo executado por repetiçoes de while em uma JOptionPane:
Ele abre uma tela se deseja cadastrar um lancamento no txt, se vc confirma ele abre outra tela para montar a string e salva-la no txt.
Retorna a tela anterior de solicitação se deseja realizar mais lancamentos ou não.
no caso se eu novamente desejar lançar um segundo servico, ele substitui o lançamento anterior pelo novo…
Como eu poderia manter esse lançamento e na linha debaixo lançar o novo serviço??

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class LancaServico {

public static void main(String[] args) {
    executaLancaServico();
}

static void executaLancaServico() {
    int quantidadeServicos = 0;
    int opcao = 0;
    do {
        try {

            String nomepet = pedeNome();
            File arqServico = GeraArquivoServico(nomepet);
            if (arqServico.exists()) {
                mostraOpcao(arqServico);
                pedeServico(arqServico);
            }

        } catch (Exception ex) {
            Dialogo.mostraErro("Error", ex.getMessage());
            Menu.executaMenu();

        }

    } while (quantidadeServicos > 20);
}

static String pedeNome() {
    String nomePet;
    do {
        nomePet = null;
        try {
            nomePet = Dialogo.lerTextoObrigatorio("Lança Serviço", "Informe o nome do pet: ");

        } catch (Exception ex) {
            Dialogo.mostraErro("Error", ex.getMessage());
            Menu.executaMenu();
        }

    } while (nomePet.length() == 0);

    return nomePet;
}

static File GeraArquivoServico(String nomepet) throws Exception {

    File arqValida = new File("Animais", nomepet);
    File arqServico = new File("Animais//" + nomepet, "servico.txt");
    if (arqValida.exists()) {
        arqServico.createNewFile();

    } else {
        Dialogo.mostraErro("Pasta Não Encontrada", "pasta: " + nomepet + "Não foi cadastrada,\nPor favor realizar cadastro!");
        return null;
    }

    return arqServico;

}

static String pedeServico(File arqServico) throws FileNotFoundException {
    String servico = Dialogo.lerTextoObrigatorio("Lança Serviço", "Informe o serviço prestado: ");

    String valorServico = Dialogo.lerTextoObrigatorio("Lança Serviço", "Informe o valor do serviço: ");

    String servicoPrestado = servico + " - " + valorServico;
    FileOutputStream fos = new FileOutputStream(arqServico);
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    PrintWriter pw = new PrintWriter(osw);
    pw.println(servicoPrestado + "\n");
    pw.close();
    return servicoPrestado;

}



static int mostraOpcao(File arqServico) throws FileNotFoundException {
    int opcao = 0;
    opcao = Dialogo.lerInteiro("Ordem Serviço",
            "1 - Adicionar serviço\n"
            + "2 - Fechar ordem de serviços");

    switch (opcao) {
        case 1:
            pedeServico(arqServico);
            break;
        case 2:
            Menu.executaMenu();
            break;
        default:
            throw new AssertionError();
    }
    return opcao;
}

o VALOR esta sempre como quantidadeServicos MAIOR que 20;
ele ta inciado com valor ZERO[quote=“RodolfoBecker, post:1, topic:357978”]
int quantidadeServicos = 0;
[/quote]

esse não é o meu problema ainda… só mudei ele para >20 para sair do loop não mexi nisso ainda… meu problema esta sendo salvar string no arquivo "servico.txt"
ele salva normal porem se eu preciso realizar outro lancamento ele substitui o arquivo existe e lança a nova infomação que foi informada!

problemas esta no static mostraOpcao e static pedeServico

Bom dia.
Faz um tempo que não faço algo assim. Não vi no código que mostrou um lugar onde ele lê as linhas do txt.
Tenta recuperar o texto txt já salvo em uma StringBuffer. Faça a leitura linha por linha e na última linha você adiciona o serviço que deseja e depois salva novamente o txt.

Vi que está utilizando um sistema de adicionar vários serviços, creio que o melhor seja utilizar uma StringBuffer ou StringBuilder para ir “montando” seu texto e depois salvar no txt tudo de uma vez, fazendo aqueles passos que mencionei.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ExampleTextData {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    String msg = "Olá Mundo. ";
    try {
        write(msg, "C:/Users/usuario/Desktop/texto.txt");
    } catch (IOException ex) {
        Logger.getLogger(ExampleTextData.class.getName()).log(Level.SEVERE, null, ex);
    }

    try {
        String x = read("C:/Users/usuario/Desktop/texto.txt");
        System.out.println(x);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(ExampleTextData.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(ExampleTextData.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public static void write(String text, String fileName) throws IOException {
    FileWriter fw = new FileWriter(fileName, true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter pw = new PrintWriter(bw);
    pw.println(text);
    pw.close();//Realiza um flush automático
    bw.close();
    fw.close();
}

public static String read(String filename) throws FileNotFoundException, IOException {
    FileReader fr = new FileReader(filename);
    BufferedReader br = new BufferedReader(fr);

    StringBuilder text = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        text.append(line);
        text.append("\n");

    }
    fr.close();
    br.close();
    return text.toString();
}

}

obrigado