Ler varios arquivos .txt de um mesmo diretÓrio

9 respostas
L

BOA NOITE! TENHO UM PROGRAMA QUE NECESSITA LER VARIOS ARQUIVOS .TXT DE UM MESMO DIRETORIO. O PROGRAMA JÁ ESTA LENDO UM ARQUIVO DE CADA VEZ, OU SEJA, ESPECIFICANDO O SEU NOME. EXISTE ALGUMA FORMA DE LER TODOS OS ARQUIVOS ESPECIFICANDO SOMENTE O DIRETORIO DE DESTINO DELES???

9 Respostas

C

Tem sim :slight_smile:

A classe File tem um método chamado listFiles() que retorna um array de Files com todos os arquivos do diretório. Com isso é só usar um for e acessar cada arquivo…

File arquivos[];
File diretorio = new File("seu_diretorio");
arquivos = diretorio.listFiles();

for(int i = 0; i < arquivos.length; i++){
   //leia arquivos[i];
}

E não precisa escrever com letras maiúsculas, parece que vc está gritando :wink:

Abraço!

P
Sim cara você pode fazer assim lista todos os arquivos do seu diretorio dessa maneira [quote]String dir = /diretorio_1/diretorio_2/diretorio_n;

java.io.File diretorio = new java.io.File(dir);

String[] arquivos = diretorio.list();[/u] depois você chama esse seu código que faz a leitura para cada um desses arquivos.
A

Se você tiver vários arquivos no diretório e quiser abrir apenas os .txt, pode fazer o seguinte:

FileFilter filter = new FileFilter() {
    public boolean accept(File file) {
        return file.getName().endsWith(".txt");
    }
};

File dir = new File("/caminho/do/seu/diretorio");
File[] files = dir.listFiles(filter);

Antonio.

J

Melhor ainda! (porém um pouco mais complicado) :stuck_out_tongue_winking_eye:

Se você tiver outras pastas dentro desse diretório e quer ler os arquivos de dentro delas, você pode se utilizar de recursividade pra buscar todos os arquivos.

Ex.:

public File[] listDir(File dir) {
		Vector enc = new Vector();

		File[] files = dir.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				//Adiciona no Vector os arquivos encontrados dentro de 'files[i]':
				File[] recFiles = listDir(files[i]);
				for (int j = 0; j < recFiles.length; j++) {
					enc.addElement(recFiles[j]);
				}
			} else {
				//Adiciona no Vector o arquivo encontrado dentro de 'dir':
				enc.addElement(files[i]);
			}
		}
		
		//Transforma um Vector em um File[]:
		File[] encontrados = new File[enc.size()];
		for (int i = 0; i < enc.size(); i++) {
			encontrados[i] = (File)enc.elementAt(i);
		}
		return encontrados;
	}

Até!! ;D

R

Aproveitando o tópico, queria saber se é possível fazer a leitura de muitos arquivos que estão no mesmo diretório, mas sem precisar informar ao java o nome dos arquivos. Por exemplo, fazer com que ele leia um a um , do primeiro até o último. E depois disso fazer o programa me dizer o nome de cada arquivo. Ficou claro? É possível?

M

Passando o nome do diretorio voce pode usar o método listFiles que te retorna um File[], nesse array contem todo sos arquivos do diretorio (ou caso use um filter apenas os filtrados), com isso voce pode trabalhar com o array sem saber o nome dos arquivos.

R

E depois como faço pra obter o nome de cada elemento do File[] ?

R

Olá, acabei de achar a resposta. Obrigado mesmo, esse fórum é mto bom!

public static void main(String[] args) {

File arquivos[];

File diretorio = new File(“C:\Teste”);
arquivos = diretorio.listFiles();

for ( int i = 0; i < arquivos.length ; i++)

System.out.println (arquivos[i].toString());

}

Obrigado novamente.

U

rod.attack:
Olá, acabei de achar a resposta. Obrigado mesmo, esse fórum é mto bom!

public static void main(String[] args) {

File arquivos[];

File diretorio = new File(“C:\Teste”);
arquivos = diretorio.listFiles();

for ( int i = 0; i < arquivos.length ; i++)

System.out.println (arquivos[i].toString());

}

Obrigado novamente.

Opa, quase isso… Pra saber o nome vc utiliza o " getName() "
http://java.sun.com/javase/6/docs/api/java/io/File.html#getName()

Ah, e quando postar trecho de código, utiliza as tags [ code ] e [ /code ]… :wink:

[]s

Criado 10 de outubro de 2006
Ultima resposta 15 de jul. de 2008
Respostas 9
Participantes 8