{"id":2578,"date":"2013-12-31T09:58:37","date_gmt":"2013-12-31T07:58:37","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2578"},"modified":"2013-12-31T10:38:29","modified_gmt":"2013-12-31T08:38:29","slug":"dateiinhalte-lesenschreiben-mit-utility-klasse-files","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/12\/dateiinhalte-lesenschreiben-mit-utility-klasse-files\/","title":{"rendered":"Dateiinhalte lesen\/schreiben mit Utility-Klasse Files"},"content":{"rendered":"<p>Da die Klasse Path nur Pfade, aber keine Dateiinformationen wie die L\u00e4nge oder \u00c4nderungszeit repr\u00e4sentiert und Path auch keine M\u00f6glichkeit bietet, Dateien anzulegen und zu l\u00f6schen, \u00fcbernimmt die Klasse Files diese Aufgaben.  <\/p>\n<h6>Einfaches Einlesen und Schreiben von Dateien<\/h6>\n<\/p>\n<p>Mit den Methoden readAllBytes(&#8230;), readAllLines(&#8230;), lines(\u2026) bzw. write(&#8230;) kann Files einfach ein Dateiinhalt einlesen oder Strings bzw. ein Byte-Feld schreiben.  <\/p>\n<p>URI uri = ListAllLines.class.getResource( &#8222;\/lyrics.txt&#8220; ).toURI();<br \/>Path path = Paths.get( uri );<br \/>System.out.printf( &#8222;Datei &#8218;%s&#8216; mit L\u00e4nge %d Byte(s) hat folgende Zeilen:%n&#8220;, path.getFileName(), Files.size( path ) );<br \/>int lineCnt = 1;<br \/>for ( String line : <b>Files.readAllLines( path<\/b> \/*, StandardCharsets.UTF_8 vor Java 8 *\/<b>)<\/b> )<br \/>&nbsp; System.out.println( lineCnt++ + &#8222;: &#8220; + line );  <\/p>\n<p>final class java.nio.file.Files  <\/p>\n<ul>\n<li>static long size(Path path) throws IOException<br \/>Liefert die Gr\u00f6\u00dfe der Datei.<\/li>\n<li>static byte[] readAllBytes(Path path) throws IOException<br \/>Liest die Datei komplett in ein Byte-Feld ein.<\/li>\n<li>static List&lt;String&gt; readAllLines(Path path) throws IOException (Java 8)<br \/>static List&lt;String&gt; readAllLines(Path path, Charset cs) throws IOException<\/li>\n<li>Liest Zeile f\u00fcr Zeile die Datei ein und liefert eine Liste dieser Zeilen. Optional ist die Angabe einer Kodierung, standardm\u00e4\u00dfig ist es StandardCharsets.UTF_8.<\/li>\n<li>static Path write(Path path, byte[] bytes, OpenOption&#8230; options) throws IOException<br \/>Schreibt eine Byte-Feld in eine Datei.<\/li>\n<li>static Path write(Path path, Iterable&lt;? extends CharSequence&gt; lines,<br \/>OpenOption&#8230; options) throws IOException (Java 8)<\/li>\n<li>static Path write(Path path, Iterable&lt;? extends CharSequence&gt; lines, Charset cs,<br \/>OpenOption&#8230; options) throws IOException<br \/>Schreibt alle Zeilen aus dem Iterable in eine Datei. Optional ist die Kodierung, die StandardCharsets.UTF_8 ist, wenn nicht anders angegeben.<\/li>\n<li>static Stream&lt;String&gt; lines(Path path)<\/li>\n<li>Stream&lt;String&gt; lines(Path path, Charset cs)<br \/>Liefert einen Stream von Zeilen einer Datei. Optional ist die Angabe der Kodierung, die sonst standardm\u00e4\u00dfig StandardCharsets.UTF_8 ist. Beide Methoden sind neu in Java 8.<\/li>\n<\/ul>\n<p>Die Aufz\u00e4hlung OpenOption ist ein Vararg, und daher sind Argumente nicht zwingend n\u00f6tig. StandardOpenOption ist eine Aufz\u00e4hlung vom Typ OpenOption mit Konstanten wie APPEND, CREATE, &#8230;  <\/p>\n<p>Hinweis: Auch wenn es naheliegt, die Files-Methode zum Einlesen mit einem Path-Objekt zu f\u00fcttern, das ein HTTP-URI repr\u00e4sentiert, funktioniert dies nicht. So liefert schon die erste Zeile des Programms eine Ausnahme des Typs \u00bbjava.nio.file.FileSystemNotFoundException: Provider &#8222;http&#8220; not installed\u00ab.  <\/p>\n<p>Path path = Paths.get( new URI &#8222;http:\/\/tutego.de\/javabuch\/aufgaben\/bond.txt&#8220; ) ); <br \/>List&lt;String&gt; content = Files.readAllBytes( path );<br \/>System.out.println( content );  <\/p>\n<p>Vielleicht kommt in der Zukunft ein Standard-Provider von Oracle, doch es ist davon auszugehen, dass quelloffene L\u00f6sungen diese L\u00fccke schlie\u00dfen werden. Schwer zu programmieren sind Dateisystem-Provider n\u00e4mlich nicht.  <\/p>\n<h6>Datenstr\u00f6me kopieren<\/h6>\n<\/p>\n<p>Sollen die Daten nicht direkt aus einer Datei in eine byte-Feld\/String-Liste gehen bzw. aus einer byte-Feld\/String-Sammlung in eine Datei, sondern von einer Datei in einen Datenstrom, so bieten sich zwei copy(\u2026)-Methoden an:  <\/p>\n<p>final class java.nio.file.Files  <\/p>\n<ul>\n<li>static long copy(InputStream in, Path target, CopyOption&#8230; options)<br \/>Entleert den Eingabestrom und kopiert die Daten in die Datei.  <\/li>\n<li>static long copy(Path source, OutputStream out)<br \/>Kopiert alle Daten aus der Datei in den Ausgabestrom.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Da die Klasse Path nur Pfade, aber keine Dateiinformationen wie die L\u00e4nge oder \u00c4nderungszeit repr\u00e4sentiert und Path auch keine M\u00f6glichkeit bietet, Dateien anzulegen und zu l\u00f6schen, \u00fcbernimmt die Klasse Files diese Aufgaben. Einfaches Einlesen und Schreiben von Dateien Mit den Methoden readAllBytes(&#8230;), readAllLines(&#8230;), lines(\u2026) bzw. write(&#8230;) kann Files einfach ein Dateiinhalt einlesen oder Strings bzw. [&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-2578","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\/2578","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=2578"}],"version-history":[{"count":2,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2578\/revisions"}],"predecessor-version":[{"id":2584,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2578\/revisions\/2584"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}