0Pricing
Java Academy · Ders

Files.walk ile Dizin Ağaçlarında Gezinme

Files.walk ile dosyaları özyinelemeli olarak listeleyin, uzantıya göre filtreleyin ve dizin boyutlarını hesaplayın.

Files.walk ile Dizin Ağaçlarında Gezinme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Files.walk Genel Bakış

Files.walk(startPath), verilen yoldan başlayarak tüm dosya ve dizinleri özyinelemeli biçimde listeleyen tembel bir Stream<Path> döndürür. Derinlik öncelikli gezinme yapar ve başlangıç yolunun kendisini de içerir.

import java.nio.file.*;
import java.util.stream.*;

try (Stream<Path> stream = Files.walk(Path.of("/home/user/projects"))) {
    stream.forEach(System.out::println);
} // stream and underlying resources closed automatically

Derinliği Sınırlama

Derin özyinelemeyi önlemek için bir maksimum derinlik sağlayın:

Path root = Path.of("/home/user/projects");

// Only immediate children (depth 1)
try (var stream = Files.walk(root, 1)) {
    stream.filter(p -> !p.equals(root)) // exclude start path
          .forEach(System.out::println);
}

Dosya Türüne Göre Filtreleme

Filtrelemek için Files.isRegularFile() veya Files.isDirectory() ile birlikte kullanın:

Path root = Path.of(".");

try (var stream = Files.walk(root)) {
    long fileCount = stream
        .filter(Files::isRegularFile)
        .count();
    System.out.println("Files: " + fileCount);
}

Uzantıya Göre Filtreleme

Belirli bir uzantıya sahip tüm dosyaları bulun:

try (var stream = Files.walk(Path.of("/src"))) {
    List<Path> javaFiles = stream
        .filter(Files::isRegularFile)
        .filter(p -> p.toString().endsWith(".java"))
        .collect(Collectors.toList());
    javaFiles.forEach(System.out::println);
}

Dizin Boyutunu Hesaplama

Bir dizinin altındaki tüm dosya boyutlarını toplayın:

try (var stream = Files.walk(Path.of("/home/user/data"))) {
    long totalBytes = stream
        .filter(Files::isRegularFile)
        .mapToLong(p -> {
            try { return Files.size(p); }
            catch (IOException e) { return 0; }
        })
        .sum();
    System.out.printf("Total: %.2f MB%n", totalBytes / 1_048_576.0);
}

Files.list ve Files.walk

Files.list(dir), ls gibi tek bir dizinin yalnızca hemen içeriğini listeler. Files.walk ise alt dizinlere de iner.

// Only immediate children:
try (var stream = Files.list(Path.of("/home/user"))) {
    stream.forEach(System.out::println);
}

Öznitelik Tabanlı Arama için Files.find

Files.find(root, depth, matcher), dosya özniteliklerine göre eşleştirme yapılırken walk+filter kullanmaktan daha verimlidir:

import java.nio.file.attribute.BasicFileAttributes;

try (var stream = Files.find(
        Path.of("/home/user"),
        Integer.MAX_VALUE,
        (p, attrs) -> attrs.isRegularFile() && attrs.size() > 1_000_000
)) {
    stream.forEach(p -> System.out.println("Large file: " + p));
}

Dizin Ağacını Silme

Bir dizini ve tüm içeriğini silmek için walk + sorted(reversed) kullanın (önce en derindeki dosyalar):

Path toDelete = Path.of("/tmp/workdir");
try (var stream = Files.walk(toDelete)) {
    stream.sorted(Comparator.reverseOrder())
          .forEach(p -> {
              try { Files.delete(p); }
              catch (IOException e) { e.printStackTrace(); }
          });
}

Dizin Ağacını Kopyalama

Dizin yapısını koruyarak kaynak ağacında gezinin ve her dosyayı kopyalayın:

Path src = Path.of("/source"), dst = Path.of("/destination");
try (var stream = Files.walk(src)) {
    stream.forEach(p -> {
        try {
            Path target = dst.resolve(src.relativize(p));
            if (Files.isDirectory(p)) Files.createDirectories(target);
            else Files.copy(p, target, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) { throw new RuntimeException(e); }
    });
}

Erişilemeyen Dosyaları İşleme

Files.walk, okuyamadığı bir dizinle karşılaşırsa IOException fırlatır. FileVisitOption.FOLLOW_LINKS seçeneğini dikkatli kullanın — sembolik bağlantı döngüleri sonsuz özyinelemeye neden olabilir.

try (var stream = Files.walk(Path.of("/"),
        FileVisitOption.FOLLOW_LINKS)) { // caution: symlink loops
    // ...
} catch (IOException e) {
    System.err.println("Access error: " + e.getMessage());
}

walkFileTree: Olay Tabanlı Gezinme

Daha ayrıntılı denetim (ziyaret öncesi, ziyaret sonrası ve hata işleme) için FileVisitor ile birlikte Files.walkFileTree() kullanın:

Files.walkFileTree(Path.of("/home/user"), new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        System.out.println("File: " + file);
        return FileVisitResult.CONTINUE;
    }
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
        System.out.println("Dir: " + dir);
        return FileVisitResult.CONTINUE;
    }
});

Hızlı Kontrol

Bir dizinin ONLY hemen alt öğelerini (özyineleme olmadan) listelemek için hangi Files yöntemini kullanmalısınız?

Özet: Files.walk

Temel çıkarımlar:

  • Files.walk(root) — tüm yolların özyinelemeli tembel Stream'i
  • Akışı kapatmak için her zaman try-with-resources kullanın
  • Files.isRegularFile/isDirectory ile filtreleyin; uzantıya göre endsWith ile filtreleyin
  • Files.list(dir) — yalnızca hemen alt öğeleri listeler
  • Files.find — verimli öznitelik tabanlı arama
  • walkFileTree — ziyaret öncesi/sonrası geri çağrılarıyla olay tabanlı gezinme

Sıkça Sorulan Sorular

“Files.walk ile Dizin Ağaçlarında Gezinme” dersi ücretsiz mi?

Evet — “Files.walk ile Dizin Ağaçlarında Gezinme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Files.walk ile Dizin Ağaçlarında Gezinme” dersinde ne öğreneceğim?

Files.walk ile dosyaları özyinelemeli olarak listeleyin, uzantıya göre filtreleyin ve dizin boyutlarını hesaplayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Files.walk ile Dizin Ağaçlarında Gezinme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Path: Dosya Konumlarını Temsil Etme
  2. Files Yardımcı Sınıfı: Okuma, Yazma, Kopyalama, Taşıma
  3. Files.walk ile Dizin Ağaçlarında Gezinme
  4. WatchService: Dosya Değişikliklerini İzleme
← Java Academy Sayfasına Dön