{"id":2580,"date":"2013-12-31T10:10:47","date_gmt":"2013-12-31T08:10:47","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2580"},"modified":"2013-12-31T10:10:47","modified_gmt":"2013-12-31T08:10:47","slug":"verzeichnislistings-directorystreamstream-holen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/12\/verzeichnislistings-directorystreamstream-holen\/","title":{"rendered":"Verzeichnislistings (DirectoryStream\/Stream) holen"},"content":{"rendered":"<p>In der Klasse Files finden sich vier Methoden (eine mehr unter Java 8), um zu einem gegebenen Verzeichnis alle Dateien und Unterverzeichnisse aufzulisten: <\/p>\n<p>final class java.nio.file.Files <\/p>\n<ul>\n<li>static Stream&lt;Path&gt; list(Path dir) throws IOException (neu in Java 8)<\/li>\n<li>static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir) throws IOException<\/li>\n<li> static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir,<br \/>DirectoryStream.Filter&lt;? super Path&gt; filter) throws IOException<\/li>\n<li>static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir, String glob) throws IOException<\/li>\n<\/ul>\n<p>Die R\u00fcckgabe DirectoryStream&lt;T&gt; ist ein Closeable (und somit AutoCloseable) sowie Iterable&lt;T&gt;, und so unterscheidet sich die M\u00f6glichkeit zur Anfrage der Dateien im Ordner grunds\u00e4tzlich von der Methode list(\u2026) in der Klasse File, die immer alle Dateien in einem Feld auf einmal zur\u00fcckliefert. Bei einem DirectoryStream wird Element f\u00fcr Element \u00fcber den Iterator geholt; trotz des Namensanhangs \u201eStream\u201c ist der DirectoryStream kein Strom im Sinne von java.util.stream. Ein Stream&lt;String&gt; hingegen liefert die kompakte Methode list(Path), sie nutzt intern einen DirectoryStream. <\/p>\n<p>try ( DirectoryStream&lt;Path&gt; files =<br \/>Files.newDirectoryStream( Paths.get( &#8222;c:\/&#8220; ) ) ) {<br \/>&nbsp; for ( Path path : files )<br \/>&nbsp;&nbsp;&nbsp; System.out.println( path.getFileName() );<br \/>} <\/p>\n<p>Aus der Tatsache, dass die Dateien und Unterverzeichnisse nicht in einem Rutsch geholt werden, leitet sich die Konsequenz ab, dass der DirectoryStream\/Stream&lt;String&gt; geschlossen werden muss, da nicht klar ist, ob der Benutzer wirklich alle Dateien abholt oder nach den ersten 10 Eintr\u00e4gen aufh\u00f6rt. Die Schnittstelle DirectoryStream erweitert die Schnittstelle Closeable (und die ist AutoCloseable, weshalb unser Beispiel ein try-mit-Ressourcen nutzt) und Stream implementiert AutoCloseable, daher ist es guter Stil, den DirectoryStream\/Stream am Ende zu schlie\u00dfen, um blockierte Ressourcen freizugeben. try-mit-Ressourcen gibt immer etwaige Ressourcen frei, auch wenn es beim Ablaufen des Verzeichnisses zu einer Ausnahme kam.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der Klasse Files finden sich vier Methoden (eine mehr unter Java 8), um zu einem gegebenen Verzeichnis alle Dateien und Unterverzeichnisse aufzulisten: final class java.nio.file.Files static Stream&lt;Path&gt; list(Path dir) throws IOException (neu in Java 8) static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir) throws IOException static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir,DirectoryStream.Filter&lt;? super Path&gt; filter) throws IOException static DirectoryStream&lt;Path&gt; newDirectoryStream(Path dir, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,5,66],"tags":[],"class_list":["post-2580","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-7","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2580","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2580"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2580\/revisions"}],"predecessor-version":[{"id":2581,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2580\/revisions\/2581"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}