SORU
9 EKİM 2008, PERŞEMBE


Nasıl Java klasörü taramak için?

Nasıl bir özyinelemeli klasör içindeki tüm dosyaların listesini almak Java miyim?

CEVAP
10 EKİM 2008, Cuma


Ağaç temsil etmek istiyorum nasıl emin değil misiniz? Neyse işte, tüm alt özyineleme kullanarak tarayan bir örnek. Dosya ve dizinleri aynı tedavi edilir. File.listFiles() olmayan dizinler için null döndürür unutmayın.

public static void main(String[] args) {
    Collection<File> all = new ArrayList<File>();
    addTree(new File("."), all);
    System.out.println(all);
}

static void addTree(File file, Collection<File> all) {
    File[] children = file.listFiles();
    if (children != null) {
        for (File child : children) {
            all.add(child);
            addTree(child, all);
        }
    }
}

Java 7 iyileştirmeler bir çift sunmaktadır. Örneğin, DirectoryStream bir sonuç sağlar - arayan artık tüm G/Ç işlemleri için beklemek tamamlamak için harekete geçmeden önce. Bu GUI güncellemeleri, erken iptal, vb artan sağlar.

static void addTree(Path directory, Collection<Path> all)
        throws IOException {
    try (DirectoryStream<Path> ds = Files.newDirectoryStream(directory)) {
        for (Path child : ds) {
            all.add(child);
            if (Files.isDirectory(child)) {
                addTree(child, all);
            }
        }
    }
}

Korkunç null dönüş değeri IOException tarafından değiştirildiğini unutmayın.

Java 7 de tree walker sunar:

static void addTree(Path directory, final Collection<Path> all)
        throws IOException {
    Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException {
            all.add(file);
            return FileVisitResult.CONTINUE;
        }
    });
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CZTUTORIALS

    CZTUTORIALS

    28 Ocak 2011
  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007