---
title: 'File-Klassen auf NIO.2 umstellen'
url: 'https://www.tutego.de/blog/javainsel/2012/05/file-klassen-auf-nio-2-umstellen'
markdown: 'https://www.tutego.de/blog/javainsel/2012/05/file-klassen-auf-nio-2-umstellen.md'
date: '2012-05-31'
description: 'Um sich von der Klasse java.io.File zu lösen und in Richtung Path zu migrieren, ist Handarbeit angesagt. Zunächst gilt es, alle Stellen zu finden, die im Workspace oder Projekt die Klasse File referenzieren. Am Einfachsten ist es, eine Anweisung wie File f; in den Code zu setzen, dann zum Beispiel …'
taxonomy:
  category:
    - Insel
---

# File-Klassen auf NIO.2 umstellen

![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/)

## File-Klassen auf NIO.2 umstellen

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

Um sich von der Klasse `java.io.File` zu lösen und in Richtung Path zu migrieren, ist Handarbeit angesagt. Zunächst gilt es, alle Stellen zu finden, die im Workspace oder Projekt die Klasse File referenzieren. Am Einfachsten ist es, eine Anweisung wie File f; in den Code zu setzen, dann zum Beispiel in Eclipse Strg+Shift+G zu aktivieren. Es folgt eine Liste aller Vorkommen. Diese Liste muss nun abgearbeitet werden und der Code auf NIO.2 konvertiert werden. Nicht immer ist es so einfach

```java
Scanner s = new Scanner( new File(dateiname) );
```

in

```java
Scanner s = new Scanner( Paths.get(dateiname) );
```

umzusetzen oder

```java
new File( dateiname ).delete();
```

in

```java
Files.delete( Paths.get( dateiname ) );
```

Eine andere Stelle, an der Konvertierungen möglich sind, betreffen FileReader und FileWriter. Diese Klassen sind gefährlich, weil sie standardmäßig die im System voreingestellte Kodierung verwenden. Eine Kodierung wie UTF-8 im Konstruktor explizit vorzugeben ist jedoch nicht möglich. NIO.2 bietet eine bessere Methode, um an einen Reader/Writer aus einer Datei zu kommen und Entwickler werden gezwungen, die Kodierung immer sichtbar anzugeben.

**Deklaration**

**Klassisch**

**Mit NIO.2**

`Reader` r =

```java
new FileReader(f);
```

`Files`.`newBufferedReader`(`Paths.get(f)`,

```java
StandardCharsets.ISO_8859_1);
```

`Writer` w =

```java
new FileWriter(f);
```

`Files`.`newBufferedWriter`(`Paths.get(f)`,

```java
StandardCharsets.ISO_8859_1);
```

Beziehen eines Dateistroms klassisch und mit NIO.2

Der Quellcode wird erst einmal länger, doch der Gewinn ist, dass die Kodierung nicht verschwindet und auch die Ein-/Ausgabe gleich gepuffert ist. Freunde der statischen Import-Anweisung komprimieren weiterhin zu Anweisungen wie

```java
Reader r = newBufferedReader( get( f ), ISO_8859_1 );
```

Es ist auf den Fall Handarbeit angesagt. Eigene Blöcke, etwa zum Schreiben in Dateien können komplett zusammengestrichen werden auf einfache Methodenaufrufe wie

```java
Files.write( Paths.get( f ), bytes );

List<String> lines = Files.readAllLines( Paths.get( f ), StandardCharsets.ISO_8859_1 );
```

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/)

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

---

## Navigation

- Previous: [Hilfe bei der Migration auf Java 7 mit NetBeans und Eclipse](https://www.tutego.de/blog/javainsel/2012/05/hilfe-bei-der-migration-auf-java-7-mit-netbeans-und-eclipse.md)
