Buat Daftar File di Direktori di Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat berbagai cara untuk membuat daftar file di dalam direktori .

2. Daftar

Jika kita ingin membuat daftar semua file di direktori dan melewati penggalian lebih lanjut ke sub-direktori, kita cukup menggunakan java.io.File # listFiles :

public Set listFilesUsingJavaIO(String dir) { return Stream.of(new File(dir).listFiles()) .filter(file -> !file.isDirectory()) .map(File::getName) .collect(Collectors.toSet()); }

3. DirectoryStream

Namun, Java 7 memperkenalkan alternatif yang lebih cepat untuk File # listFiles yang disebut DirectoryStream .

Mari kita lihat seperti apa persamaannya:

public Set listFilesUsingDirectoryStream(String dir) throws IOException { Set fileList = new HashSet(); try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(dir))) { for (Path path : stream) { if (!Files.isDirectory(path)) { fileList.add(path.getFileName() .toString()); } } } return fileList; }

Kami dapat dengan mudah melihat bahwa meskipun DirectoryStream mungkin lebih cepat, itu bukan bagian dari API Stream dan tidak cukup setuju untuk bekerja dengannya.

Selain itu, DirectoryStream mengharuskan kita menutup resource, yang berarti membungkusnya dengan try-with-resources juga.

4. Berjalan

Atau, kita bisa daftar semua file dalam direktori dengan berjalan ing itu ke dikonfigurasi kedalaman .

Mari gunakan java.nio.file.Files # walk untuk membuat daftar semua file dalam direktori ke kedalaman tertentu:

public Set listFilesUsingFileWalk(String dir, int depth) throws IOException { try (Stream stream = Files.walk(Paths.get(dir), depth)) { return stream .filter(file -> !Files.isDirectory(file)) .map(Path::getFileName) .map(Path::toString) .collect(Collectors.toSet()); } }

Tentu saja, ingatlah untuk menggunakan try-with-resources agar pegangan file untuk dir ditutup dengan benar.

Atau, jika kami ingin memiliki kontrol lebih terhadap apa yang terjadi dengan setiap file yang dikunjungi, kami juga dapat menyediakan implementasi pengunjung:

public Set listFilesUsingFileWalkAndVisitor(String dir) throws IOException { Set fileList = new HashSet(); Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (!Files.isDirectory(file)) { fileList.add(file.getFileName().toString()); } return FileVisitResult.CONTINUE; } }); return fileList; }

Ini berguna ketika kita ingin melakukan pembacaan tambahan, pemindahan, atau penghapusan file saat kita pergi.

5. Kesimpulan

Dalam tutorial singkat ini, kami menjelajahi berbagai cara untuk membuat daftar file di dalam direktori.

Seperti biasa, kode sumber lengkap dari contoh tersedia di GitHub.