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.


$config[zx-auto] not found$config[zx-overlay] not found