Matrizes e arquivos de texto

5 respostas
M

Preciso de aprender a fazer 2 coisas diferentes em java.

1º - Como eu preencho uma matriz com os dados de um arquivo de texto separados através de um caracter separador?
2º - O conteúdo desses arquivos tem sempre o mesmo padrão… porem os nomes desses arquivos ñ, são todos nomes de arquivos randômicos… como faço para extrair esses dados de todos esses arquivos que estão em uma mesma pasta sem ter que saber o nome deles… pois já que os nomes são randômicos ñ há como eu criar um padrão de leitura desses arquivos e eu ñ posso renomealos.

5 Respostas

JM4X

para ler os arquivos do diretório escolhido, vc cria um objeto File, passando como parâmetro o diretório:

String sep = File.separator;
File dir = new File(sep+"caminho"+sep+"do"+sep+"arquivo");
for (File f : dir.listFiles()) {
	// faz algo com o f
}

para ler os dados do arquivo eu recomendo o Scanner.

gpellizzoni

Estude a API Apache Commons. É bastante útl quando se deseja trabalhar com arquivos.

http://commons.apache.org/io/

JM4X

O que acha?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;

public class JavaApplication6 {

	public static void main(String[] args) throws FileNotFoundException {
		String path = "/Users/americo/Desktop/pasta";
		path = path.replaceAll("\\/", File.separator);
		File pasta = new File(path);
		List<Guy> guys = new ArrayList<Guy>();
		for (File f : pasta.listFiles()) {
			Scanner scan = new Scanner(f);
			scan.useDelimiter(Pattern.compile(";|\r\n"));
			while (scan.hasNextLine()) {
				String name = null;
				byte age = 0;
				float salary = 0;
				if (scan.hasNext())
					name = scan.next();
				if (scan.hasNextInt())
					age = scan.nextByte();
				if (scan.hasNextFloat())
					salary = scan.nextFloat();
				guys.add(new Guy(name, age, salary));
			}
		}
		System.out.println(guys);
	}

	private static class Guy {

		private String name;
		private byte age;
		private float salary;

		public Guy() {
		}

		public Guy(String name, byte age, float salary) {
			this.name = name;
			this.age = age;
			this.salary = salary;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public byte getAge() {
			return age;
		}

		public void setAge(byte age) {
			this.age = age;
		}

		public float getSalary() {
			return salary;
		}

		public void setSalary(float salary) {
			this.salary = salary;
		}

		@Override
		public String toString() {
			return "[" + name + ", " + age + ", " + salary + "]";
		}
	}
}
Rafael_Mesquita_Mour

Olá amigo, não sei se é bem o que você quer, mas quando precisei trabalhar com arquivo de texto e arrays fiz da seguinte forma:

public void capturarDiretorios() {
		File arquivo = new File("E:\Rafael\Desktop\CPC_FILES\Arquivo.txt");
		File [] diretorio = arquivo.listFiles();
		for(File f : diretorio){
			if(f.getName().endsWith(".txt")){
				readContent(f);
				//Arquivo .txt				
			} else {
				//Outra extensão de arquivo
			}
		}
	}
	
	public void readContent(File f){
		try{
			BufferedReader reader = new BufferedReader(new FileReader(f));
			String linha = null;
			while((linha = reader.readLine()) != null){
				capturarConteudo(linha);
			}
		} catch (FileNotFoundException fileNotFound){
			fileNotFound.printStackTrace();
		} catch (IOException ioex){
			ioex.printStackTrace();
		} catch (Exception e){
			e.printStackTrace();
		}
	}
	
	public void capturarConteudo(String linha){
		String [] dadosDaLinha = linha.split("Caractere especial aqui");	
		//Faz mais alguma coisa aqui
	}

Espero ter ajudado ^^

T

Por partes...

2º - O conteúdo desses arquivos tem sempre o mesmo padrão... porem os nomes desses arquivos ñ, são todos nomes de arquivos randômicos... como faço para extrair esses dados de todos esses arquivos que estão em uma mesma pasta sem ter que saber o nome deles... pois já que os nomes são randômicos ñ há como eu criar um padrão de leitura desses arquivos e eu ñ posso renomealos.
//Como não se sabe os nomes dos arquivos, voce pode selecioná-los em tempo de execução
			                       
			               JFileChooser choose = new JFileChooser("C:");//diretorio onde estariam os arquivos
			               File file = new File("");
			               int escolha = choose.showOpenDialog(null);
			       
			               if (escolha == choose.APPROVE_OPTION) {
			       
			                   file = choose.getSelectedFile();
			       
			               }
1º - Como eu preencho uma matriz com os dados de um arquivo de texto separados através de um caracter separador?
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.forName("ISO-8859-1"))); //É bom especificar a codificação, ex.: ISO-8859-1.
			       
			       
			               String[][] matriz = new String[100][10];
			               String linha = "";
			               int j = 0;
			               //Lendo o arquivo linha por linha
			               while ((linha = reader.readLine()) != null) {
			       
			                   for (int i = 0; i < 10; i++) {
			       
			                       matriz[j][i] = linha.split(";")[i];//pegando os campos do arquivo, separados por ';' e colocando-os na matriz
			                   }
			                   j++;//itera para a próxima linha da matriz
			               }
    }
Vê se é mais ou menos isso...

flw

Criado 8 de agosto de 2011
Ultima resposta 9 de ago. de 2011
Respostas 5
Participantes 5