Zoznam súborov v adresári v jazyku Java
1. Prehľad
V tomto rýchlom návode sa pozrieme na rôzne spôsoby, ako zoznam súborov v adresári.
2. Výpis
Ak chceme vypísať všetky súbory v adresári a preskočiť ďalšie kopanie do podadresárov, môžeme jednoducho použiť 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
Java 7 však predstavila rýchlejšiu alternatívu do Súbor # listFiles zavolal DirectoryStream.
Pozrime sa, ako vyzerá ekvivalent:
public Set listFilesUsingDirectoryStream (String dir) vyvolá IOException {Set fileList = new HashSet (); skúsiť (DirectoryStream stream = Files.newDirectoryStream (Paths.get (dir))) {pre (Cesta cesty: stream) {if (! Files.isDirectory (cesta)) {fileList.add (path.getFileName () .toString () ); }}} return fileList; }
To môžeme ľahko vidieť zatiaľ čo DirectoryStream môže byť rýchlejší, nie je súčasťou Prúd API a nie je také vhodné na prácu s ním.
Tiež DirectoryStream vyžaduje, aby sme uzavreli zdroj, čo znamená zabaliť ho do a vyskúšajte zdroje, tiež.
4. Chôdza
Alebo môžeme vypísať všetky súbory v adresári podľa chodiťto na nakonfigurovaný hĺbka.
Poďme použiť java.nio.file.Files # chodit vypísať všetky súbory v adresári do danej hĺbky:
public Set listFilesUsingFileWalk (String dir, int depth) hodí 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 ()); }}
Samozrejme, nezabudnite použiť vyskúšajte zdroje takže popisovač súboru pre r sa správne uzavrie.
Alebo ak chceme mať väčšiu kontrolu nad tým, čo sa stane s každým navštíveným súborom, môžeme dodať aj implementáciu pre návštevníkov:
public Set listFilesUsingFileWalkAndVisitor (String dir) hodí 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 ());} návrat FileVisitResult.CONTINUE;}}); návratový zoznam súborov; }
Je to užitočné, keď chceme priebežne čítať, presúvať alebo mazať súbory.
5. Záver
V tomto rýchlom výučbe sme preskúmali rôzne spôsoby výpisu súborov v adresári.
Celý zdrojový kód príkladov je ako vždy k dispozícii na serveri GitHub.