Dateizugriffe finden in Java über Datenströme (streams) mit Readern und Writern statt. Konkret genügt dafür z.B. ein FileReader. Durch das Puffern per BuffererReader wird das ganze optimiert. Beim BufferedReader wird die Lese-Performance erhöht, da nicht jedes Byte einzeln gelesen wird und sich somit die Anzahl der Lesezugriffe verringert.

Datei lesen

  • Input Stream anlegen (Datei öffnen) z.B. mit
    - FileReader f=new FileReader ("datei.txt") oder besser:
    - BufferedReader b=new BufferedReader (new FileReader("datei.txt"));
  • Ein Zeichen lesen mit int c = f.read()
  • Ganze Zeile lesen mit String s = f.readLine
    (beste Methode zum Lesen von Textdateien, benötigt BufferedReader())
  • Datei schliessen mit f.close
  • Es wird immer ein IOExceptionHandling mittels try-catch benötigt.

Datei zeichenweise lesen

  import java.io.*;
  public class Test {
    public static void main (String args[]) {
      int c;
      try {
        FileReader f = new FileReader("d:/test/test.txt");
        while((c = f.read()) != -1) { // liest zeichenweise int-Werte aus Datei bis -1 kommt
          System.out.print((char)c);  // wandelt int-Wert in char-Wert
        }
        f.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }

Datei zeilenweise lesen

  import java.io.*;
  public class Test {
    public static void main (String args[]) {
      String zeile="";
      try {
        BufferedReader b = new BufferedReader (new FileReader("d:/test/test.txt") );
        while( (zeile = b.readLine()) != null ) { // liest zeilenweise aus Datei
          System.out.println(zeile);              // Ausgabe zeilenweise
        }
        b.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }

Dateizugriffe finden in Java über Datenströme (streams) mit Readern und Writern statt . Durch den Einsatz von BufferedWriter werden die zu schreibenden Daten in einem internen Puffer gespeichert. Erst wenn dieser voll ist werden die Daten real in den Stream geschrieben. Das reduziert die Zahl der write-Aufrufe.

Datei schreiben:

  • Output Stream anlegen (Datei öffnen) z.B. mit
    - FileWriter f=new FileWriter ("datei.txt"); oder besser:
    - BufferedWriter b=new BufferedWriter (new FileReader("datei.txt")); oder komfortabler:
    - PrintWriter p = new PrintWriter(new FileWriter("datei.txt"));
  • Ein Zeichen schreiben mit p.write(int)
  • Datei schliessen mit p.close
  • Es wird immer ein IOExceptionHandling mittels try-catch benötigt.

Datei schreiben mit FileWriter

  import java.io.*;
  public class Test {
    public static void main (String args[]) {
      String text = "Hallo";
      try {
        FileWriter f = new FileWriter ("d:/test/test.txt");
        f.write(text);
        f.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }

Datei schreiben mit BufferedWriter

  import java.io.*;
  public class Test {
    public static void main (String args[]) {
      String s = "";
      try {
        BufferedWriter b = new BufferedWriter (new FileWriter ("d:/test/test.txt"));
        for (int i = 1; i <= 10; ++i) {
          s = "Dies ist Zeile "+i;
          b.write(s);
          b.newLine();
        }
        b.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }

Datei schreiben mit PrintWriter

  import java.io.*;
  public class Test {
    public static void main (String args[]) {
      String s = "";
      try {
        PrintWriter p = new PrintWriter (new FileWriter("d:/test/test.txt"));
        for (int i = 1; i <= 5; ++i) {
          s = "Dies ist Zeile "+i;
          p.println(s);
        }
        p.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }
/***** Dateiinfos und Dateimanipulationen *****/
import java.io.*;
public class Test {
  public static void main (String args[]) {
    File f = new File("d:/test/test.txt");
    File f2 = new File("d:/test/xxx.txt");
    if (f.exists() && !f.isDirectory()) {
      System.out.println("Datei "+f.getName()+" gefunden");
      System.out.println("Datei ist lesbar?       "+f.canRead());
      System.out.println("Datei ist beschreibbar? "+f.canWrite());
      System.out.println("Dateigröße in Bytes?    "+f.length());
      f.renameTo(f2); // Datei umbenennen (test.txt gibt es dann nicht mehr)
      f2.delete();    // Datei löschen    (xxx.txt löschen)
    }
    else {
      System.out.println("Datei "+f.getName()+" nicht gefunden");
    }
  }
}
/* Zahlen aus einer Datei lesen, hochzählen und zurückschreiben.
Zuerst Datei zeilenweise lesen und in einem Vektor speichern.
Dann die gelesenen Zeilen=Zahlen aus dem Vektor lesen und um 1 erhöhen
und zeilenweise in Datei schreiben.
*/
import java.io.*;
import java.util.*;
public class Test {
  public static void main(String[] args) {
    File   file = new File("d:/test/test.txt"); // Datei mit z.B. 3 Zeilen, gefüllt mit 1, 2, 3
    Vector v = new Vector(); // Vektor zum Speichern der gelesenen Zeilen
    String vElem = "";
    int i=0;
    if (dateiGefunden(file)) {
      try {
        BufferedReader einDatei = new BufferedReader(new FileReader(file)); // Reader nutzen
        String einZeile = "";
        while ((einZeile = einDatei.readLine()) != null)  {
          System.out.println("Gelesen: "+einZeile);
          v.addElement(einZeile); // Zeile als Object in Vektor schreiben
        }
        einDatei.close();
        PrintWriter ausDatei = new PrintWriter (new FileWriter (file)); // Zeilenweise schreiben
        for (Enumeration elem=v.elements(); elem.hasMoreElements(); ) {
          vElem=(String)elem.nextElement(); // Vektorobjekt in String wandeln
          i=Integer.parseInt(vElem)+1; // String in int wandeln und hochzählen
          ausDatei.println(i); // int zeilenweise in Datei schreiben
          System.out.println("Geschrieben: "+i);
        }
        ausDatei.close();
      }
      catch (IOException e) {
        System.out.println("Fehler: "+e.toString());
      }
    }
  }
  private static boolean dateiGefunden(File file) {
    boolean gefunden=false;
    if (file.exists() && !file.isDirectory()) { // prüfen, ob Datei vorhanden
      System.out.println("Datei '"+file.getName()+"' gefunden");
      gefunden=true;
    }
    else {
      System.out.println("Datei '"+file.getName()+"' nicht gefunden");
    }
    return gefunden;
  }
}

Datei löschen

Zum Löschen von Dateien wird die Klasse "File" im Paket "java.io" benötigt, die im Umgang mit Dateien und Verzeichnissen hilfreich ist.

import java.io.File;

public class Test {

  public static void main(String[] args) {
    File datei = new File("c:/temp/test.txt");
    if (datei.exists()) {
      datei.delete();
      System.out.println("Datei gelöscht!");
    }
  }
}

Alle Dateien mit der Endung ".err" aus einem Verzeichnis löschen

import java.io.File;

public class Test {

  public static void main(String[] args) {
    File path = new File("C:/temp/");
    for (File file : path.listFiles()) {
      if (file.toString().endsWith(".err")) {
        file.delete();
      }
    }
  }
}