Alterar 'valor' em .txt

3 respostas Resolvido
java
G

Olá, estou desenvolvendo um programa, e gostaria de saber se existe alguma maneira de alterar algo do .txt

exemplo, por padrão vem

a: 0
b: 2

gostaria de saber se existe um método, por exemplo que modifique o valor de A ou B.

3 Respostas

TerraSkilll

Desconheço algo pronto que faça isso. Se fosse um formato mais padrão como json ou xml, você poderia usar APIs que facilitam a manipulação desses formatos, mas como não parece ser o caso, você vai ter de implementar isso.

Basicamente, você precisa:

  • abrir o arquivo;
  • ler o que está escrito (se necessário)
  • fazer mudanças no conteúdo do arquivo;
  • gravar o arquivo;

Se você sabe exatamente o que quer gravar, não precisa ler o arquivo, basta gravar direto por cima.

Uma referência sobre leitura de arquivos: https://blog.caelum.com.br/lendo-arquivos-texto-em-java/ .

Abraço.

G

vlww

confuso
Solucao aceita

Você terá que fazer algo assim. Considerei o formato do arquivo como sendo um par de chave-valor por linha separados por “:” e ignorando espaços em branco em volta do “:”.

import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Testando {

    public static void main(String[] args) throws Exception {
        String nomeArquivo = "dados.txt";
        String nomeAtributo = "b";
        String novoValor = "NovoValorB";

        Testando teste = new Testando();
        teste.alterarValorNoArquivo(nomeArquivo, nomeAtributo, novoValor);
    }

    public void alterarValorNoArquivo(String nomeArquivo, String nomeAtributo, String novoValor) throws IOException {
        Map<String, String> representacaoEmMap = obterDadosDoArquivo(nomeArquivo);

        if (representacaoEmMap.get(nomeAtributo) == null) {
            throw new NoSuchElementException("Atributo com o nome '" + nomeAtributo + "' não encontrado no arquivo");
        }

        representacaoEmMap.put(nomeAtributo, novoValor);

        sobrescreverArquivo(nomeArquivo, transformarDeVoltaParaLinhas(representacaoEmMap));

        System.out.println("Arquivo alterado com sucesso!");
    }

    public void sobrescreverArquivo(String nomeArquivo, List<String> linhasDoArquivo) throws IOException {
        Path arquivo = Paths.get(nomeArquivo);
        Files.write(arquivo, linhasDoArquivo, Charset.forName("UTF-8"));
    }

    private Map<String, String> obterDadosDoArquivo(String nomeArquivo) throws IOException {
        File arquivo = new File(nomeArquivo);

        try (Stream<String> linhas = Files.lines(arquivo.toPath())) {
            return linhas
                    .map(linha -> linha.split(":"))
                    .collect(Collectors.toMap(chaveValor -> chaveValor[0].trim(), chaveValor -> chaveValor[1].trim()));
        }
    }

    private List<String> transformarDeVoltaParaLinhas(Map<String, String> representacaoDosDadosEmMap) {
        return representacaoDosDadosEmMap.entrySet()
                .stream()
                .map(entry -> entry.getKey() + ":" + entry.getValue())
                .collect(Collectors.toList());
    }
}
Criado 27 de abril de 2019
Ultima resposta 29 de abr. de 2019
Respostas 3
Participantes 3