Skip to content
On this page
8. Files
1

Files

Objektorienteirte Programmierung 2

23.04.2023
8. Files
2

Java und Files

Ziel: Files lesen und schreiben können.

23.04.2023
8. Files
3

Files auf dem Medium

  • Können gross sein. Lesen geht langsam im Vergleich zum lesen von Memory.
  • Datenträger nützt sich ab (SD-Karte hat schlechtes "Wear Leveling").
  • Lesen und Schreiben ist nicht rechenintensiv, hat aber lange IO Zeiten (=> blockiert UI Thread).
  • File-IO wird vom OS zur Verfügung gestellt (OS versteht, wie das Medium genau beschrieben werden muss).
23.04.2023
8. Files
4

Lesen in Blöcken

  • Files können Byte um Byte gelesen werden.
  • Häufig verlangt man eine grosse Menge Bytes, bekommt vom OS aber nur kleinere Segmente zurück (als byte[]).
  • Zusammensetzen dieser Bytes wird in Java von FileReader / BufferedReader übernommen.
  • Files können Text, aber auch binäre Daten enthalten.
23.04.2023
8. Files
5

File Klasse

  • Pfad im Konstruktor übergenem
java
new File("./pfad/zum/file");
  • Nesting von Files
java
new File(new File("parentDir"), "file")
23.04.2023
8. Files
6

Path Separator

  • in Windows üblicherweise \ Backslash.
  • in UNIX like OS mit / Forward Slash.

In Java kann auch unter Windows ein / verwendet werden.

23.04.2023
8. Files
7

Methoden der Klasse File

Methode
String file.getPath()Relativer Pfad des Files
String file.getAbsolutePath()Absoluter Pfad
String file.getName()Filename
boolean file.exists()Existiert das File?
boolean file.isDirectory()Ist das File ein Directory?
long file.length()Filegrösse
String [] file.list()Liste von Files eines Directories
23.04.2023
8. Files
8

Textfile: Erste Zeile eines Files lesen

java
private void readSamples() throws IOException {
    File file = new File("samples.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);

    String line = bufferedReader.readLine();
}
23.04.2023
8. Files
9

throws IOExcepetion

  • File existiert vielleicht nicht
  • Fehler passiert beim lesen
  • Falsche Permissions
  • ...

Fehler müssen behandelt werden, CheckedExcepetion

23.04.2023
8. Files
10

Ganzes File lesen

java
private void readSamples() throws IOException {
    File file = new File("samples.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);

    String fileText = "";
    while (true) {
        String line = bufferedReader.readLine();
        if (line == null) {
            break;
        }

        fileText += line + "\n";
    }
}
23.04.2023
8. Files
11

Noch kompakter

java
private void readSamples() throws IOException {
    File file = new File("samples.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);

    String fileText = "";
    String line;

    while ((line = bufferedReader.readLine()) != null) {
        fileText += line + "\n";
    }
}
23.04.2023
8. Files
12

Aufräumen am Ende mit close

java
private String readSamples() throws IOException {
    File file = new File("samples.txt");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);

    String fileText = "";
    String line;

    while ((line = bufferedReader.readLine()) != null) {
        fileText += line + "\n";
    }
    bufferedReader.close();

    return fileText;
}
23.04.2023
8. Files
13

String in ein File schreiben

java
private void writeFile(String text) throws IOException {
    File file = new File("samples.txt");
    FileWriter fileWriter = new FileWriter(file);
    BufferedWriter writer = new BufferedWriter(fileWriter);

    writer.write(text);
    writer.close();
}
23.04.2023
8. Files
14

Achtung ⚠️, Buffered IO

  • Bei write wird nicht sofort geschrieben.
  • write ist non-blocking (Funktionsaufruf zwar fertig, File aber nicht fertig geschrieben).
  • close() wartet, bis das File fertig geschrieben ist. Alternative: flush().
23.04.2023
8. Files
15

PrintWriter

  • Kann auch printf verwenden.
java

private void printIntoFile(String text) throws IOException {
    File file = new File("samples.txt");
    FileWriter fileWriter = new FileWriter(file);
    PrintWriter writer = new PrintWriter(fileWriter);

    writer.print(text);
    writer.close();

}
23.04.2023
8. Files
16

Files selektieren mit JFileChooser

java
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
    System.out.println("You chose to open this file: " +
        chooser.getSelectedFile().getName());
}
23.04.2023