Manipular arquivo pra somar valores iguais

2 respostas
C

Aí pessoal, blz?

Eu tenho vários arquivos .txt e já consigo ler os arquivos e juntar tudo em um único arquivo tb .txt.

Estou precisando fazer a leitura de um arquivo .TXT onde possui duas colunas, apenas, uma é código de barras e a outra a quantidade.
preciso criar uma classe que leia o arquivo e se encontrar algum código igual, este devera somar os valores da quantidade e deixar apenas um dos códigos no arquivo.

Exemplo:
Arquivo antes (atual)

CÓD…QTD
7506195137130 01 -------------> Este código possui outro igual no arquivo
7896115700392 01
7898944894051 01
7506195137130 01 ------------->Este é o código igual ao primeiro

Arquivo como deverá ficar:

7506195137130 02 ---------------> Valor da quantidada somada
7896115700392 01
7898944894051 01

Alguém pode me ajuda ?

2 Respostas

K

Fiz assim rapidinho, ajuste na medida que for necessário pra você.

try {
			FileReader fr = new FileReader(new File("C:\\Users\\kleber\\Desktop\\teste.txt"));
			BufferedReader  br = new BufferedReader(fr);
			
			TreeMap<String,Integer> aux = new TreeMap<String,Integer>();
			
			String linha = "";
			while((linha = br.readLine()) != "" && linha != null) {
				String[] valores = linha.split(" ");
				if(aux.get(valores[0]) == null) {
					aux.put(valores[0],Integer.parseInt(valores[1]));
				} else {
					aux.put(valores[0],aux.get(valores[0]) + Integer.parseInt(valores[1]));
				}
			}
			
			fr.close();
			BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:\\Users\\kleber\\Desktop\\teste.txt")));
			for (String codigo : aux.keySet()) {
				String qtd = aux.get(codigo).toString();
				bw.write(codigo + " " + qtd + "\r");
			}
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

Se o seu arquivo tiver:

7506195137130 1
7896115700392 1
7898944894051 1
7506195137130 1

vai ficar assim:

7506195137130 2
7896115700392 1
7898944894051 1

C

Valeu, Kleber, fiz umas alterações pra mim e funcionou bem.

Apenas as quebras de linhas não estavam sendo realizadas quando usado o “\r” na linha 21 do seu código, mas isso é besteira, usei o método newLine e funfou legal.

Obrigado.

Criado 20 de outubro de 2015
Ultima resposta 20 de out. de 2015
Respostas 2
Participantes 2