Ler varios arquivos .txt de um mesmo diretÓrio

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???

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!

3 curtidas

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.

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.

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

1 curtida

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?

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.

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

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.

[quote=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.[/quote]

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