Arbeitsblatt 7 – EAD II

Werbung
Arbeitsblatt 7 – EAD II - Dateiarbeit
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 name;
try
{
BufferedReader konsoleneingabe = new BufferedReader(new
InputStreamReader(System.in));
BufferedWriter dateiausgabe = new BufferedWriter(new
FileWriter(datei));
System.out.println("Es sollen Namen eingegeben werden.
Zum Beenden bitte ende eingeben.");
name = konsoleneingabe.readLine();
while (name.compareTo("ende") != 0) {
dateiausgabe.write(name);
dateiausgabe.newLine();
System.out.println("Bitte Namen eingeben:");
name = konsoleneingabe.readLine();
}
dateiausgabe.close();
}
catch (Exception e)
{
System.out.println("Fehler beim Schreiben in die Datei.");
}
}
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 in der Klasse Liste aus der letzten Woche eine Methode
public void toFile()
die den Inhalt der Liste in eine Datei ausgibt. Der Inhalt jedes Elementes (außer next) soll in
eine Zeile geschrieben werden. Sie können nur Strings schreiben und brauchen den Inhalt also
als eine Zeichenkette.
Dafür müssen Sie auf den Inhalt des Elementes zugreifen. Schreiben Sie dafür eine
Zugriffsmethode für die Klasse Element, die den Inhalt als String zurückgibt, durch einen :
getrennt.
/**
* Methode gibt den Inhalt des Elementes als String zurück
*
*/
public String getInhalt()
{
String inhalt;
inhalt = name + " : " + groesse;
return inhalt;
}
Aufgabe 2
Schreiben Sie für die Klasse Liste eine Methode
public void fromFile()
die den Inhalt einer Datei in eine Liste einliest. Wir gehen davon aus, dass eine korrekt
formatierte Datei ausgewählt wird. Erstellen Sie zuerst ein Struktogramm.
Für die Umwandlung der eingelesenen Textzeile in ihre Bestandteile wird die Methode split()
verwendet, die für Strings zur Verfügung steht.
public String[] split(String regex)
Splittet den String gemäß dem regulären Ausdruck regex auf und liefert die
Teilstrings in einem String-Array zurück. Falls der Ausdruck nicht auf den String
passt, wird ein Array mit genau einem Element zurückgegeben. Dieses Element ist
der unveränderte String.
z.B. liefert folgender Befehl den String bis zum ersten Doppelpunkt:
name = zeile.split(":")[0];
Dann muss ein neues Element erzeugt und dieses in die Liste eingefügt werden.Rufen Sie
dazu die vorhandenen Listenmethoden auf.
Herunterladen