Verfahren ab Java 11
v.11Mit der Java-Version 11
wurde in der Klasse java.nio.file.Files
die
Methode readString​()
eingeführt. Sie
existiert in zwei überladenen Versionen: readString(Path
path)
und readString(Path path, Charset
cs)
. Beide liefern den Inhalt einer Datei als
String-Objekt. Der Pfad zur Datei wird durch das
Argument path
übergeben. Durch ein zweites
Argument kann der in der Datei verwendete Zeichensatz
angegeben werden. Als Standard wird hier UTF8
verwendet.
public class DateiAuslesenNeuClass { private static void liesDatei(String datName) { try { String s = Files.readString(Path.of(datName)); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String datName = "/Pfad/zur/Datei.txt"; liesDatei(datName); } }
Im Beispiel wird das benötigte Path
-Objekt
durch dessen statische Methode of()
erzeugt. Sie wurde ebenfalls erst mit Java 11 eingeführt
und kann als Argument entweder einen Pfad-String (s.o.)
oder mehrere, hintereinander zu lesende Pfadabschnitte
übergeben bekommen.
Path.of("/Pfad", "zur", "Datei")
Wichtig ist, dass die Leseroutine in einen try-catch-Block gefasst wird, um diesbezügliche Fehler abfangen zu können.
Verfahren vor Java 11
Das Verfahren besteht darin, dass ein FileReader
einen Character-Strom ausliest, der dann in einem
StringBuffer
zwischengespeichert wird.
Im
Beispiel wird zunächst ein File-Objekt der
auszulesenden Datei gebildet, die anschließend auf
Existenz und Lesbarkeit geprüft wird. Ein leerer StringBuffer
wird instanziert. Er stellt eine im Gegensatz zum String
veränderbare Character-Sequenz dar.
Innerhalb
einer while-Schleife liest der FileReader die
einzelnen Characters einschließlich
Zeilenumbrüchen, Tabulatoren, etc. in Form von
(Unicode-)int -Werten aus. Sie müssen
anschließend, bevor sie dem StringBuffer
hinzugefügt werden, zu char gecastet
werden. Nach Abschluss der Operation müssen der FileReader
geschlossen und der StringBufferr noch zu String
gecastet werden.
Da der FileReader bei
Problemen eine IOException werfen kann, wird
der Lesevorgang in einem try-catch-Block gekapselt.
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class DateiAuslesenClass {
private static void ladeDatei(String datName) {
File file = new File(datName);
if (!file.canRead() || !file.isFile())
System.exit(0);
FileReader fr = null;
int c;
StringBuffer buff = new StringBuffer();
try {
fr = new FileReader(file);
while ((c = fr.read()) != -1) {
buff.append((char) c);
}
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(buff.toString());
}
public static void main(String[] args) {
String dateiName = "test.txt";
ladeDatei(dateiName);
}
}
v.7 Ab Java 7 kann der Code durch die Verwendung des try-with-resources-Statements noch etwas vereinfacht werden:
try (FileReader fr = new FileReader(file)) { while ((c = fr.read()) != -1) { buff.append((char) c); } } catch (IOException e) { e.printStackTrace(); }
Eine weitere bequeme Möglichkeit, um eine Datei auszulesen, stellt die Klasse Scanner zur Verfügung. Siehe hierzu auch den gleichnamigen Artikel.