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.
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.
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:
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.
vlww
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());
}
}