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
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
Abraço!
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)
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
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 ]…
[]s