Gerar Array a partir de um TXT

11 respostas
R

Amigos,

Tenho um arquivo TXT com várias linhas, cada linha tem as informações de vários procesos (data, cliente, situacao etc..).
Gostaria de ler este arquivo e gerar uma array, para poder percorrer esta array por porcesso, já criei um código que interpreta esse TXT, mas quero que ele grave as informaçoes em uma array, segue o código:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class GeraArray {
	public void readFile(String fileName){
		String linha, processo, situacao;

		try{
			File file = new File(fileName);
			Scanner scanner = new Scanner(file);
			scanner.useDelimiter("line.separator");
			while(scanner.hasNextLine()){
				
				linha = scanner.nextLine();
								
				if(linha.startsWith("01")){ 
					processo = linha.substring(2,12);
					System.out.println(processo);
				}
				if(linha.startsWith("11")){ 
					situacao = linha.substring(2,77);
					System.out.println(situacao);
				}
			}
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}
	}
}

11 Respostas

T

O problema de um array é que é necessário saber de antemão qual será o seu tamanho. Aprenda a usar ArrayList, que isso ajuda bastante.

J
nicoweda

Eu não sei se isso pode te ajudar… mas pelo que eu entendi no arquivo vc vai ter as informações armazenadas como chave, valor…
nome=bruno
idade=23

Nesses casos eu não recomendaria nem o ArrayList, eu recomendaria a que vc utilizasse um Properties.

 uma olhada no codigo abaixo.

Basicamente, vc vai escrever um arquivo .properties contendo chaves e valores, e a sua classe gerarArray ficaraia assim.

Para retornar os valores vc utiliza o metodo get() passando a chave

Ex:.

String nome = GerarArray.get(nome);

String idade = GerarArray.get(idade);
import java.io.IOException;
import java.util.Properties;

public class GerarArray {
	private static Properties props;
	
	static{
		props = new Properties();
		FileInputStream fis;
		try {
			fis = new FileInputStream("nomedoarquivo.properties");		
			props.load(fis);
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
	
	public static String get(String chave){
		return props.getProperty(chave);
	}
}

Eu to dizendo isso porque eu passei pelo mesmo problema que vc e minha solução foi essa! Não sei se isso resolve o seu problema, ou se cria novos!!!

De qualquer maneira… fica aqui a sugestão!
Abraços!

nicoweda

Eu não sei se isso pode te ajudar… mas pelo que eu entendi no arquivo vc vai ter as informações armazenadas como chave, valor…
nome=bruno
idade=23

Nesses casos eu não recomendaria nem o ArrayList, eu recomendaria a que vc utilizasse um Properties.

 uma olhada no codigo abaixo.

Basicamente, vc vai escrever um arquivo .properties contendo chaves e valores, e a sua classe gerarArray ficaraia assim.

Para retornar os valores vc utiliza o metodo get() passando a chave

Ex:.

String nome = GerarArray.get(nome);

String idade = GerarArray.get(idade);
import java.io.IOException;
import java.util.Properties;

public class GerarArray {
	private static Properties props;
	
	static{
		props = new Properties();
		FileInputStream fis;
		try {
			fis = new FileInputStream("nomedoarquivo.properties");		
			props.load(fis);
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
	
	public static String get(String chave){
		return props.getProperty(chave);
	}
}

Eu to dizendo isso porque eu passei pelo mesmo problema que vc e minha solução foi essa! Não sei se isso resolve o seu problema, ou se cria novos!!!

De qualquer maneira… fica aqui a sugestão!
Abraços!

H

Somente complementando o que o thingol disse , eu acharia melhor você criar uma classe onde voce pegasse a informações do TXT joga-se dentro de um objeto e depois adiciona-se este objo a um campo do ArrayList

Vitor Hugo Brito de Oliveira

R

Não Properties fica complicado pq o arquivo esta mais ou menos assim:

010613482977200611071957198981963274900301CONSUMO

01 - numero da linha
[telefone removido] - numero do Processo
20061107 - data (ano, mes e dia)
19571989819632749 (outras informações)
00301 (Código do cliente)
CONSUMO - tipo de processo

R

hugov, poderia me dar um noção ou exemplo como fazer isto?

T

Leia o arquivo linha por linha, e separe as informações com substring. É simples e bobo, já que o formato das linhas parece ser fixo.

R

ok, isso ae eu já fiz, agora gostara de saber como colocar estas informações em uma arraylist?

J

Você não queria um array? Então, a Entidade Thingol já lhe passou a idéia e eu passei a implementação, em parte.

Adicione um separador de campos, ponto e vírgula por exemplo, nessa sua linha do .txt pra melhor controlar os valores.

Ex.:
01;[telefone removido];20061107;19571989819632749;00301;CONSUMO

Caso não tenha como, pegue trechos da sua string via substring, mas daí você terá que saber sempre a posição inicial de cada substring.

Depois pra cada linha pegue um array de string retornado pelo spli(";").

Varra essa array de string e crie uma estrutura hashmap com key e value.

Após isso adicione a instância desse HashMap pra cada índice do ArrayList.

J
import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.Scanner;
 
 public class GeraArray {
 	public void readFile(String fileName){
 		String linha, processo, situacao;
		ArrayList al = new ArrayList();
 
 		try{
 			File file = new File(fileName);
 			Scanner scanner = new Scanner(file);
 			scanner.useDelimiter("line.separator");

			while(scanner.hasNextLine()){
 				
 				linha = scanner.nextLine();

 				numLinha = linha.substring(0,1);
				numProcesso = linha.substring(2,11);
				data = linha.substring(12,19);
				outrasInform = linha.substring(20,36);
				codCliente = linha.substring(37,41);
				tipoProcesso = linha.substring(42);

				HashMap hm = new HashMap();
				hm.put("numLinha",numLinha);
				hm.put("numProcesso",numProcesso);
				hm.put("data",data);
				hm.put("outrasInform",outrasInform);
				hm.put("codCliente",codCliente);
				hm.put("tipoProcesso",tipoProcesso);

				al.add(hm);

 			}

			al.trimToSize();

 		}catch(FileNotFoundException e){
 			e.printStackTrace();
 		}

		for (int i=0;i<al.size();i++) {
			HashMap hm = (HashMap)al.get(i);
			System.out.prinllnt("Linha " + i);
			System.out.println(hm.get("numLinha"));
			System.out.println(hm.get("numProcesso"));
			System.out.println(hm.get("data"));
			System.out.println(hm.get("outrasInform"));
			System.out.println(hm.get("codCliente"));
			System.out.println(hm.get("tipoProcesso"));
		}
 	}
 }
Criado 14 de novembro de 2006
Ultima resposta 14 de nov. de 2006
Respostas 11
Participantes 5