Popis datoteka u direktoriju na Javi

1. Pregled

U ovom brzom vodiču proučit ćemo različite načine za popis datoteka unutar direktorija.

2. Popis

Ako želimo navesti sve datoteke u direktoriju i preskočiti daljnje kopanje po poddirektorijima, možemo jednostavno koristiti 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

Međutim, Java 7 je uvela bržu alternativu do Datoteka # listFiles pozvao DirectoryStream.

Pogledajmo kako izgleda ekvivalent:

public Set listFilesUsingDirectoryStream (String dir) baca IOException {Set fileList = new HashSet (); pokušajte (Stream DirectoryStream = Files.newDirectoryStream (Paths.get (dir))) {for (Put puta: stream) {if (! Files.isDirectory (put)) {fileList.add (path.getFileName () .toString () ); }}} return fileList; }

To lako možemo vidjeti dok DirectoryStream može biti brži, nije dio Stream API i nije baš toliko podložan radu s njim.

Također, DirectoryStream zahtijeva da zatvorimo resurs, što znači da ga omotamo s pokušajte s resursima, isto.

4. Hodanje

Ili, možemo navesti sve datoteke u direktoriju po hodatiing na konfigurirano dubina.

Iskoristimo java.nio.file.Datoteke # šetnja za popis svih datoteka u direktoriju do zadane dubine:

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

Naravno, ne zaboravite koristiti pokušajte s resursima pa ručica datoteke za red pravilno se zatvori.

Ili, ako želimo imati veću kontrolu nad onim što se događa sa svakom posjećenom datotekom, možemo pružiti i implementaciju posjetitelja:

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

To je zgodno kad želimo dodatno čitati, premještati ili brisati datoteke.

5. Zaključak

U ovom smo brzom vodiču istražili različite načine popisa datoteka u direktoriju.

Kao i uvijek, puni izvorni kod primjera dostupan je na GitHub-u.