---
title: 'Dateiinhalte lesen/schreiben mit Utility-Klasse Files'
url: 'https://www.tutego.de/blog/javainsel/2013/12/dateiinhalte-lesenschreiben-mit-utility-klasse-files'
markdown: 'https://www.tutego.de/blog/javainsel/2013/12/dateiinhalte-lesenschreiben-mit-utility-klasse-files.md'
date: '2013-12-31'
description: 'Da die Klasse Path nur Pfade, aber keine Dateiinformationen wie die Länge oder Änderungszeit repräsentiert und Path auch keine Möglichkeit bietet, Dateien anzulegen und zu löschen, übernimmt die Klasse Files diese Aufgaben. Einfaches Einlesen und Schreiben von Dateien Mit den Methoden readAllBytes(…'
taxonomy:
  category:
    - Insel
    - 'Java 7'
    - 'Java 8'
---

# Dateiinhalte lesen/schreiben mit Utility-Klasse Files

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## Dateiinhalte lesen/schreiben mit Utility-Klasse Files

31.12.2013 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

Da die Klasse Path nur Pfade, aber keine Dateiinformationen wie die Länge oder Änderungszeit repräsentiert und Path auch keine Möglichkeit bietet, Dateien anzulegen und zu löschen, übernimmt die Klasse `Files` diese Aufgaben.

###### Einfaches Einlesen und Schreiben von Dateien

Mit den Methoden `readAllBytes(…)`, `readAllLines(…)`, `lines(…)` bzw. `write(…)` kann `Files` einfach ein Dateiinhalt einlesen oder Strings bzw. ein Byte-Feld schreiben.

```java
URI uri = ListAllLines.class.getResource( "/lyrics.txt" ).toURI();
Path path = Paths.get( uri );
System.out.printf( "Datei '%s' mit Länge %d Byte(s) hat folgende Zeilen:%n", path.getFileName(), Files.size( path ) );
int lineCnt = 1;
for ( String line : Files.readAllLines( path /*, StandardCharsets.UTF_8 vor Java 8 */) )
 System.out.println( lineCnt++ + ": " + line );
```

final class `java.nio.file.Files`

- `static long size(Path path) throws IOException`Liefert die Größe der Datei.
- `static byte[] readAllBytes(Path path) throws IOException`Liest die Datei komplett in ein Byte-Feld ein.
- `static List<String> readAllLines(Path path) throws IOException (Java 8)`static List<String> readAllLines(Path path, Charset cs) throws IOException
- Liest Zeile für Zeile die Datei ein und liefert eine Liste dieser Zeilen. `Optional` ist die Angabe einer Kodierung, standardmäßig ist es `StandardCharsets`.UTF\_8.
- `static Path write(Path path, byte[] bytes, OpenOption… options) throws IOException`Schreibt eine Byte-Feld in eine Datei.
- static Path write(Path path, `Iterable`<? extends CharSequence> lines, OpenOption… options) throws IOException (Java 8)
- static Path write(Path path, `Iterable`<? extends CharSequence> lines, `Charset` cs, OpenOption… options) throws IOException Schreibt alle Zeilen aus dem Iterable in eine Datei. Optional ist die Kodierung, die StandardCharsets.UTF\_8 ist, wenn nicht anders angegeben.
- `static Stream<String> lines(Path path)`
- `Stream<String> lines(Path path, Charset cs)`Liefert einen Stream von Zeilen einer Datei. Optional ist die Angabe der Kodierung, die sonst standardmäßig StandardCharsets.UTF\_8 ist. Beide Methoden sind neu in Java 8.

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, …

Hinweis: Auch wenn es naheliegt, die `Files`-Methode zum Einlesen mit einem Path-Objekt zu füttern, das ein 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«.

Path path = `Paths`.get( new `URI` „<http://tutego.de/javabuch/aufgaben/bond.txt>“ ) );

```java
List<String> content = Files.readAllBytes( 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.

###### Datenströme kopieren

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(…)`-Methoden an:

final class `java.nio.file.Files`

- `static long copy(InputStream in, Path target, CopyOption… options)`Entleert den Eingabestrom und kopiert die Daten in die Datei.
- `static long copy(Path source, OutputStream out)`Kopiert alle Daten aus der Datei in den Ausgabestrom.

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 7](https://www.tutego.de/blog/javainsel/category/java-7/), [Java 8](https://www.tutego.de/blog/javainsel/category/java-8/)

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Zeichenorientierte Datenströme über Files beziehen](https://www.tutego.de/blog/javainsel/2013/12/zeichenorientierte-datenstrme-ber-files-beziehen.md)
- Next: [Verzeichnislistings (DirectoryStream/Stream) holen](https://www.tutego.de/blog/javainsel/2013/12/verzeichnislistings-directorystreamstream-holen.md)
