Ein- und Ausgabe mit Dateien Daten kann man, statt als Parameter oder über die Konsole, auch aus Dateien einlesen und in Dateien abspeichern. Dateien sind durch einen Dateinamen und den Pfad, unter dem sie auf dem Computer zu finden sind, gekennzeichnet. Verwenden Sie die die Klasse FileDialog für die Übergabe von Dateinamen und –pfad (siehe Handbuch http://www.dpunkt.de/java/Referenz/Das_Paket_java.awt/50.html ). “Die Klasse FileDialog implementiert einen Dialog, mit dem Dateien ausgewählt werden können. Der FileDialog kennt zwei Modi: LOAD, um Dateien zum Laden zu selektieren, und SAVE, um Dateien zu speichern. Es kann ein Filter für die anzuzeigenden Dateinamen gesetzt werden, so dass nur die Dateien angezeigt werden, deren Name auf den Filter passt. Der FileDialog ist grundsätzlich modal.” Beispiel (Ausschnitt): FileDialog dialog = new FileDialog(new Frame(), "Datei öffnen", FileDialog.LOAD); dialog.setVisible(true); if (dialog.getFile() == null) return; datei = new File(dialog.getDirectory(),dialog.getFile()); Hier wird zuerst die Variable “dialog” deklariert, dann der Dialog angezeigt. Es wird abgefragt, ob der Nutzer wirklich eine Datei ausgewählt hat, falls er “Abbrechen” geklickt hat, wird hier auch die Methode verlassen. Schließlich wird die Dateivariable entsprechend der ermittelten Parameter deklariert. Niun kann auf die Datei zugegriffen werden. Hier folgt das Beispiel aus der Übung zur Konsoleneingabe (einAus()), aber nun werden die über die Konsole eingegebenen Namen nicht auf die Konsole, sondern in eine Datei ausgegeben). public void inDateiSchreiben() { File datei; FileDialog dialog = new FileDialog(new Frame(), "Datei speichern", FileDialog.SAVE); dialog.setVisible(true); if (dialog.getFile() == null) return; datei = new File(dialog.getDirectory(),dialog.getFile()); String eingabe; try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter ausgabe = new BufferedWriter(new FileWriter(datei)); System.out.println("Es sollen Namen eingegeben werden. Zum Beenden bitte ende eingeben."); eingabe = in.readLine(); while (eingabe.compareTo("ende") != 0) { ausgabe.write(eingabe); //Inhalt in Datei ausgeben ausgabe.newLine(); //Enter ausgeben System.out.println("Bitte Namen eingeben:"); eingabe = in.readLine(); } ausgabe.close(); //Datei schließen } catch (Exception e) { e.printStackTrace(); } } Folgende Bibliotheken sind erforderlich: import java.io.*; import java.awt.*; Das Einlesen der Daten aus einer Datei erfolgt ebenso, nur muss beim Aufruf des FileDialogs beachtet werden, dass die Option “LOAD” anstelle von “SAVE” angegeben wird. FileDialog dialog = new FileDialog(new Frame(), "Datei öffnen", FileDialog.LOAD); Aufgabe 1 Erstellen Sie eine Methode public void ausDateiLesen() , die den Inhalt der soeben erstellten Datei einliest und nummeriert auf der Konsole ausgibt. Die Dateivariable wird mit einer Instanz von FileReader erstellt: BufferedReader ein = new BufferedReader(new FileReader(datei)); Mit folgendem Test können Sie abfragen, ob die Datei weitere Daten zum Lesen bereithält: while (ein.ready() == true) Zusatzaufgabe Schreiben Sie ein Programm, mit dem eine Datei kopiert werden kann. Geben Sie am Ende des Kopierprozesses eine Fertig-Meldung auf der Konsole aus, die angibt, welche Quelldatei (Name) in welche Zieldatei (Name) kopiert wurde.