SORU
28 Mart 2010, Pazar


Özyinelemeli olarak Java ile bir dizindeki tüm dosyaları listeler

Bir dizindeki tüm dosyaların özyinelemeli olarak adını yazdıran bu işlevi var. Sorun benim kod her yineleme ile uzak ağ aygıtı erişmek için var çünkü çok yavaş.

Planım ilk dizindeki tüm dosyaları özyinelemeli olarak yüklemek ve daha sonra tüm dosyaları filtrelemek için düzenli ifade ile tüm dosyaları kontrol edip sonra istemiyorum. Herkes daha iyi bir önerisi olan var mı?

public static printFnames(String sDir){
  File[] faFiles = new File(sDir).listFiles();
  for(File file: faFiles){
    if(file.getName().matches("^(.*?)")){
      System.out.println(file.getAbsolutePath());
    }
    if(file.isDirectory()){
      printFnames(file.getAbsolutePath());
    }
  }
}

Bu sadece bir test daha sonra gitmiyorum kullanmak için kod gibi bu, yerine gidiyorum ekleme yolu ve değiştirilme tarihi her hangi dosya ile eşleşen bir düzenli ifade için gelişmiş bir dizi.

CEVAP
28 Mart 2010, Pazar


Bu gerçek üretim kodu olduğunu varsayarsak yazacaksın, sonra da zaten - Apache Commons IO, FileUtils.listFiles() özellikle çözüldüğünü ... ... bu tür bir şey için çözüm kullanmanızı öneririm. İç içe geçmiş dizinler, filtreleri (adına göre, değişiklik zamanı, vb.) yönetir.

Eğer düzenli ifade için örneğin,:

Collection files = FileUtils.listFiles(
  dir, 
  new RegexFileFilter("^(.*?)"), 
  DirectoryFileFilter.DIRECTORY
);

Bu ardışık dosyalar için ^(.*?) düzenli ifade eşleşen bir koleksiyon gibi sonuçlar dönen arar.

Bu kendi kodunuzu çalışırken daha hızlı olacağını belirterek, aynı şeyi yapıyor değer - Java dosya sistemi trol biraz yavaş. Fark, Apache Commons sürümü herhangi bir hata olacaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006