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

Como Sobrescrever um Arquivo (I/O Java)?

Eu fiz como se fosse um pequeno banco de dados com um arquivo (.txt)

É um banco de dados com perguntas e três respostas embaixo, assim:

obs. Ignore que está colorido, não é código é só um arquivo (txt)

Quantos lados tem um quadrado?
Quatro
Dois
Um
Em que planeta vivemos?
Terra
Marte
Jupiter
Em que ano estamos?
2013
2012
2014
Time rebaixado para a serie B em 2013?
Palmeiras
Santos
Grêmio

Ou seja, a cada quatro linhas eu tenho uma Questao.

Então eu preciso fazer um método com a seguinte funcionalidade:

Eu escrevo a pergunta que eu quero mudar.

Escrevo a nova questão e preciso que ele substitua a questão inteira, ex:

obs. Abaixo é a simulação do código em tempo de execução

Digite a pergunta a ser alterada    // Mensagem na tela
Em que planeta vivemos?             // Eu digitei

Digite a nova pergunta              // Mensagem na tela
Em que sistema vivemos?             // Eu digitei
Digite a nova resposta              // Mensagem na tela
Solar                               // Eu digitei
Digite a segunda reposta            // Mensagem na tela
Lunar                               // Eu digitei
Digite a terceira resposta          // Mensagem na tela
Marciano

E eu preciso que ele tenha o seguinte resultado no arquivo:

obs. Ignore que está colorido, não é código é só um arquivo (txt)

Quantos lados tem um quadrado?
Quatro
Dois
Um
Em que sistema vivemos?       //Repare que essa linha mudou
Solar                         //Repare que essa linha mudou
Lunar                         //Repare que essa linha mudou
Marciano                      //Repare que essa linha mudou
Em que ano estamos?
2013
2012
2014
Time rebaixado para a serie B em 2013?
Palmeiras
Santos
Grêmio

Consegui chegar ao seguinte método, mais ele só troca um palavra:

obs. abaixo é código

public static void alteraLinha(String palavraAntiga, String palavraNova) throws IOException {
        String arquivo = "Perguntas.txt";
        String arquivoTmp = "ARQUIVO-tmp";

        BufferedWriter writer = new BufferedWriter(new FileWriter(arquivoTmp));
        BufferedReader reader = new BufferedReader(new FileReader(arquivo));

        String linha;
        while ((linha = reader.readLine()) != null) {
            if (linha.contains(palavraAntiga)) {
                linha = linha.replace(palavraAntiga, palavraNova);
            }
            writer.write(linha + "\n");
        }

        writer.close();
        reader.close();

        new File(arquivo).delete();
        new File(arquivoTmp).renameTo(new File(arquivo));
    }

Tem outro detalhe, eu preciso que o método alteraLinha tenha a seguinte assinatura:

obs. abaixo é código

public static void alterarLinha(String palavraAntiga, Questao novaQuestao){

}

A classe Questao é assim:

obs. abaixo é código

//Classe Questao
public class Questao{
    private String pergunta;
    private String resposta;
    private String respostaErrada1;
    private String respostaErrada2;

    //getters e setters...
}

Ou seja a nova pergunta será armazenada na classe Questao para que ela possa ser enviada como parâmetro.

Como eu faço para ter o resultado que eu espero?

  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!

1 resposta

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