Arquivo

Bom, eu tenho o caminho

C:\Temp\rec\20070612\339270

dentro eu tenho varias subpastas que eu nao sei o nome delas com varios arquivos xmls. eu preciso de um metodo que verifique as pastas , quantas sao e me retorne tb o nome delas para que eu possa itera-las abrindo arquivo por arquivo e seguindo pra proxima pasta. alguem conhece alguma forma? obrigado

fhsantiago não manjo muito de arquivos, mas uma opção é:
se vc tiver o nome das pastas em sequencia, faça um if comparando se o diretorio existe, ± assim:

for{
     File dir = new File("\20070612\339270");
          if(dir.mkdirs())
          {
               // se encontrar
          }
}

hehe, nada legal né, rsrs, mas se ninguem souber, isso me faz lembrar os tempos de Clipper hauhauah, acho que a solução ja ta ai em baixo.

Isso é o caso de usar uma rotina recursiva. OK?

Um exemplo de uma rotina dessas (que já tinha na minha mala de ferramentas; dê uma ajeitada para as suas necessidades):

import java.util.*;
import java.io.*;

/**
 * Faz algo parecido com "dir /s *.html" (no caso Windows) ou
 * find . -name '*.html' -print (no caso Unix). 
 * Cuidado: se houver um arquivo "XXX.HTML" (em maiúsculas) não vai
 * reconhecer, a menos que você explicite na expressão regular.
 */
class ExemploDir {
	/**
	 * @param startingDirectory O diretório inicial.
	 * @param pattern Uma expressão regular que deve ser aplicada
	 * ao nome do arquivo.
    */
	public List<File> findFiles (final File startingDirectory, final String pattern) {
	     List<File> files = new ArrayList<File>();
		 if (startingDirectory.isDirectory()) {
		      File[] sub = startingDirectory.listFiles(new FileFilter() {
			      public boolean accept (File pathname) {
				      return pathname.isDirectory() || pathname.getName().matches (pattern);
				  }
			  });
			  for (File fileDir: sub) {
			      if (fileDir.isDirectory()) {
				       files.addAll (findFiles (fileDir, pattern));
				  } else {
				       files.add (fileDir); // 
				  }
			  }
		 }
		 return files;
	}
    /**
	 * 
	 */
    public static void main(String[] args) {
	    ExemploDir ed = new ExemploDir();
		// Listando todos os arquivos "*.html"
	    System.out.println (ed.findFiles (new File("."), ".*\\.html"));
		// Listando todos os arquivos "*.java" ou "abs*.txt"
	    System.out.println (ed.findFiles (new File("."), "(.*\\.java|abs.*\\.txt)"));
		// Listando todos os arquivos "*.htm*" (incluindo arquivos *.HTM) - útil para Windows
	    System.out.println (ed.findFiles (new File("."), "(?i).*\\.htm[^.]*"));
		// Listando todos os arquivos "*.htm*" e "*.jsp" 
		// (incluindo arquivos *.HTM e *.JSP) no diretório C:\INETPUB - útil para Windows
	    System.out.println (ed.findFiles (new File("C:/INETPUB"), "(?i)(.*\\.htm[^.]*|.*\\.jsp)"));
	}
}