Acessando várias pastas e lendo conteúdo dos arquivos.... como?

5 respostas
A

Olá pessoal, tudo bem? Primeiramente gostaria de dizer que sempre gostei muito desse fórum, estou acompanhando o mesmo a um bom tempo e hoje estou com uma dúvida que nao encontrei nos posts, talvez seja algo simples de se resolver mas estou tendo muito problema para resolver :frowning:

O que eu preciso é o seguinte:
Uma aplicação simples que leia um arquivo .properties para verificar quais pastas serão acessadas, com base nisso a aplicação irá ler o conteúdo de cada pasta e apresentar a primeira linha de conteúdo de cada arquivo contido nas pastas.

Acredito que para muita gente é facil fazer isso, gostaria muito que fosse colado o código fonte dessa façanha, pq eu consegui fazer isso acessando só uma pasta, quando é 2 ou mais da tanto erro que eu nem sei por onde começar… alguem poderia colar o código aqui ou me mandar por email o projeto em um .zip no email [email removido] ?

muito obrigado!
tom

5 Respostas

ciczan

Não tenho nenhum exemplo aqui em mãos, mas vc vai ter que fazer +/- isso:

Criar um objeto file para cada dir:
File dir = new File(“caminho”);

Daí listar os arquivos:
File[] arqs = dir.listFiles();

Daí interar cada um e:

BufferedReader bf = new BufferedReader(new FileReader(arq));

String linha = br.readLine();
peron

eu fiz esta classe, derivando de uma que existia na we, o autor nao tinha na época:

Classe PathPattern

/**
 *
 */
package br.pro.peron.nucleo.regex;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Pattern;

/**
 *
 */
public class PathPattern implements FilenameFilter {

	private ArrayList patterns;

	private boolean regexp;

	private boolean acceptdir;

Classe FileLister

/**
 * 
 */
package br.pro.peron.nucleo.arquivo;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;

import br.pro.peron.nucleo.regex.PathPattern;

/**
 *
 */
public class FileLister {

	/**
	 * 
	 */
	public FileLister() {
		super();
		// TODO Auto-generated constructor stub
	}

	
	public ArrayList listFiles(String dir, String filtro, boolean recursive, boolean regexp) {
		ArrayList result = new ArrayList();
		File d = new File(dir);
		if (d.exists() && d.isDirectory()) {		
			PathPattern f = new PathPattern(filtro, regexp, recursive);
			ArrayList tmp = processDir(d, f, recursive);
			result.addAll(tmp);
			
		} else { 
			//da merda aqui
		}
		return(result);
	}
	
	
	private ArrayList processDir(File dir, FilenameFilter filtro, boolean recursive) {
		File []lista = dir.listFiles(filtro);
		ArrayList files = new ArrayList();
		for (int i = 0; i < lista.length; i++) {
			File elem = lista[i];
			if (elem.isDirectory()) {
				if (recursive) {
					ArrayList tmp = processDir(elem, filtro, recursive);
					files.addAll(tmp);
				}
			} else {
				files.add(elem);
			}
		}
		return(files);
	}
	
	
	
}

e o metodo para ler arquivos:

public static ArrayList readFile(InputStream is) {
		try {
	        BufferedReader in = new BufferedReader(new InputStreamReader(is));
			return(FuncFiles.readFile(in));
	    } catch (Exception e) {
			return(new ArrayList());
	    }
	}

pra usar:

//traz todos os arquivos da pasta D:\Temp que tem filtro *.txt, recursivamente, e filtra por wildcard e nao por expressao regular
    FileLister f = new FileLister();
    ArrayList files = f.listFiles("D:\\Temp", "*.txt", true, false);
    
    //ai eh so percorrer os arquivos no array

		for (Iterator iter = arquivos.iterator(); iter.hasNext();) {
			File element = (File) iter.next();
			//le o conteudo do arquivo com a fucao acima em uma de suas classes
			ArrayList fcontent = suaclasse.readFile(element.getAbsolutePath());

                       //percorre as linhas do arquivo, faz o que vc quer, e pronto!

                }

ajudou?

A

Muito obrigado pessoal, irei fazer o teste e informo se deu certo!

abraços!

peron

segue em anexo, um projeto que fiz pra aprender um pouco mais…

é um programa de procura e substituição em arquivos texto…

A

mais uma vez obrigado brother!

Criado 3 de abril de 2006
Ultima resposta 4 de abr. de 2006
Respostas 5
Participantes 3