Di Java, Bagaimana cara mencantumkan hanya subdirektori dari direktori?
Saya ingin menggunakan fungsionalitas java.io.File, apa metode terbaik di Java untuk melakukan ini?
Anda dapat menggunakan kelas File untuk mendaftar direktori.
File file = new File("/path/to/directory");
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
System.out.println(Arrays.toString(directories));
Memperbarui
Komentar dari penulis pada posting ini menginginkan cara yang lebih cepat, diskusi hebat di sini: Bagaimana cara mengambil daftar direktori CEPAT di Java?
Pada dasarnya:
Solusi Java 8 yang sangat sederhana:
Ini setara dengan menggunakan FileFilter (bekerja dengan Java yang lebih lama juga):
sumber
::
kerja titik dua ganda dalam hal ini?@Mohamed Mansour Anda hampir sampai ... argumen "dir" dari yang Anda gunakan sebenarnya adalah jalur saat ini, jadi akan selalu mengembalikan nilai true. Untuk melihat apakah anak itu subdirektori atau tidak, Anda perlu menguji anak itu.
sumber
Jika Anda tertarik dengan solusi yang menggunakan Java 7 dan NIO.2, itu bisa seperti ini:
sumber
sumber
Bagi yang juga tertarik dengan Java 7 dan NIO, ada solusi alternatif jawaban @ voo di atas . Kita bisa menggunakan try-with-resources yang memanggil
Files.find()
dan fungsi lambda yang digunakan untuk memfilter direktori.Kami bahkan dapat memfilter direktori berdasarkan nama dengan mengubah fungsi lambda:
atau berdasarkan tanggal:
sumber
Pada 2012 (tanggal pertanyaan) ya, bukan hari ini.
java.nio
API harus diutamakan untuk persyaratan seperti itu.Mengerikan dengan begitu banyak jawaban, tetapi bukan cara sederhana yang akan saya gunakan
Files.walk().filter().collect()
.Secara global, dua pendekatan dimungkinkan:
1)
Files.walk(Path start, )
tidak memilikimaxDepth
batasan sementara2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
memungkinkan untuk mengaturnya.Tanpa menentukan batasan kedalaman apa pun, itu akan memberi:
Dan jika karena alasan lama, Anda perlu mendapatkan Daftar
File
Anda bisa menambahkanmap(Path::toFile)
operasi sebelum pengumpulan:sumber
Files.list(Path)
yang mungkin sama denganFiles.walk(Path,1)
.Files.list(Path)
adalah alternatif yang adil jika kita tidak ingin mengulang folder secara rekursif. Untuk mengulang folder secara rekursif,walk()
lebih cocok.Solusi yang berhasil untuk saya, tidak ada di daftar jawaban. Karenanya saya memposting solusi ini di sini:
Disini saya telah menggunakan
org.apache.commons.io.filefilter.FileFilterUtils
dari Apache commons-io-2.2.jar. Dokumentasinya tersedia di sini: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.htmlsumber
Diberikan direktori awal sebagai
String
String
jalur sebagai parameter. Dalam metode:listFiles
metodesumber
Inilah solusi untuk kode saya. Saya baru saja melakukan sedikit perubahan dari jawaban pertama . Ini akan mencantumkan semua folder hanya dalam direktori baris demi baris yang diinginkan:
sumber