Files: Einfaches Einlesen und Schreiben von Dateien
Mit den Methoden readAllBytes(…), readAllLines(…), readString(…), lines(…)und write(…) und writeString(..) kann Files einfach einen Dateiinhalt einlesen oder Strings bzw. ein Byte-Feld schreiben.
URI uri = ListAllLines.class.getResource( "/lyrics.txt" ).toURI();
Path p = Paths.get( uri );
System.out.printf( "Datei '%s' mit Länge %d Byte(s) hat folgende Zeilen:%n",
p.getFileName(), Files.size( p ) );
int lineCnt = 1;
for ( String line : Files.readAllLines( p ) )
System.out.println( lineCnt++ + ": " + line );
final class java.nio.file.Files
- staticbyte[]
readAllBytes(Pathpath)``throwsIOExceptionLiest die Datei komplett in ein Byte-Feld ein. staticList<String>readAllLines(Pathpath)``throwsIOExceptionstaticList<String>readAllLines(Pathpath,Charsetcs)``throwsIOExceptionLiest die Datei Zeile für Zeile ein und liefert eine Liste dieser Zeilen. Optional ist die Angabe einer Kodierung, standardmäßig ist es UTF_8.static String readString(Path path) throws IOExceptionstatic String readString(Path path, Charset cs) throws IOExceptionLiest eine Datei komplett aus und liefert den Inhalt als String. Ohne Kodierung gilt standardmäßig UTF-8. Beide Methoden neu in Java 11.staticPathwrite(Pathpath,byte[]bytes,..options)throwsIOExceptionSchreibt ein Byte-Array in eine Datei.staticPathwrite(Pathpath,Iterable<?extendsCharSequence>lines,.. options) throws IOExceptionstaticPathwrite(Pathpath,Iterable<?extendsCharSequence>lines,Charsetcs, .. options) throws IOException Schreibt alle Zeilen aus dem Iterable in eine Datei. Optional ist die Kodierung, die StandardCharsets.UTF_8 ist, so nicht anders angegeben.static Path writeString(Path path, CharSequence csq, OpenOption… options) throws IOExceptionstatic Path writeString(Path path, CharSequence csq, Charset cs, OpenOption… options) throws IOExceptionSchreibt eine Zeichenfolge in die genannte Datei. Der übergebene path wird zurückgegeben. Ohne Kodierung gilt standardmäßig UTF-8. Beide Methoden neu in Java 11.
Die Aufzählung OpenOption ist ein Vararg, und daher sind Argumente nicht zwingend nötig. StandardOpenOption ist eine Aufzählung vom Typ OpenOption mit Konstanten wie APPEND, CREATE usw.
Beispiel: Lies eine UTF-8-kodierte Datei ein:
String s = Files.readString( path );
Bevor die praktische Methode in Java 11 einzog, sah eine Alternative so aus:
String s = new String( Files.readAllBytes( path ), StandardCharsets.UTF_8 );
Hinweis: Auch wenn es naheliegt, die Files-Methode zum Einlesen mit einem Path-Objekt zu füttern, das einen HTTP-URI repräsentiert, funktioniert dies nicht. So liefert schon die erste Zeile des Programms eine Ausnahme des Typs »java.nio.file.FileSystemNotFoundException: Provider ›http‹ not installed«.
URI uri = new URI( „http://tutego.de/javabuch/aufgaben/bond.txt“ );
Path path = Paths.get( uri ); //
List<String> content = Files.readAllLines( path );
System.out.println( content );
Vielleicht kommt in der Zukunft ein Standard-Provider von Oracle, doch es ist davon auszugehen, dass quelloffene Lösungen diese Lücke schließen werden. Schwer zu programmieren sind Dateisystem-Provider nämlich nicht.