• Keine Ergebnisse gefunden

Folien zum Thema Dateien

N/A
N/A
Protected

Academic year: 2022

Aktie "Folien zum Thema Dateien"

Copied!
16
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Modul 404

Kompetenz: Vorgabe interpretieren, objektbasiert mit einer Programmiersprache implementieren, dokumentieren und testen.

Objektbasiert programmieren nach Vorgabe

Ueli Hagger

Modul 404

Kompetenz: Vorgabe interpretieren, objektbasiert mit einer Programmiersprache implementieren, dokumentieren und testen.

Dateien, File 1

(2)

1.

Programmierung Grundlagen – mit Beispielen in Java Kapitel 12.10

2.

Java 9 – Grundlagen Programmierung

Kapitel 14: Ausnahmebehandlung mit Exceptions

3.

Java 2 JDK 5 / JDK 6 - Grundlagen Programmierung Kapitel 15: Mit Dateien arbeiten

Kapitel 16: Mit Streams arbeiten

4.

(Java 7 - Fortgeschrittene Programmierung)

Dateien

Programmierung Grundlagen

Kapitel 12.10: Mit Daten in Dateien arbeiten Java 9 – Grundlagen Programmierung Kapitel 14: Ausnahmebehandlung mit Exceptions Java 2 JDK 5 / JDK 6 - Grundlagen Programmierung Kapitel 15: Mit Dateien arbeiten

Kapitel 16: Mit Streams arbeiten 1. Klasse File

2. Ein- und Ausgabeströme 3. Daten in Datei schreiben 4. Daten aus Datei lesen 5. Klasse FileWriter 6. Klasse FileReader 3

(3)

Erstellen sie folgendes GUI

Welche Elemente verwenden sie?

1. JLabel 2. JTextField 3. JButton 4. JLabel 5. JLabel 6. JList 7. JList 8. JButton

1 2

3 4

8

7 6

5

GUI

Einzelarbeit

Erstellen sie das GUI mit Eclipse. Verwenden sie dazu die vorher definierten Komponenten.

Es muss noch kein zusätzlicher Code programmiert werden.

5

(4)

Grobbeschreibung

In den JList sollen nach drücken des Buttons "Inhalte anzeigen"

links: alle Verzeichniseintragungen des Verzeichnisses, welches in Feld Verzeichnis eingetragen wurde anzeigt.

rechts: alle Dateien des Verzeichnisses, welches in Feld Verzeichnis eingetragen wurde anzeigt.

Zum Testen erstellen sie einen Verzeichnis mit Unterverzeichnissen und Dateien, z.B.

Endprodukt

7

(5)

Analyse

Beschreibung

Im Verzeichniseingabefeld muss als erstes das darzustellende Verzeichnis, d.h. der Pfad eingetragen werden.

Danach wird durch Drücken des Buttons "Inhalte anzeigen" das ausgewählte Verzeichnis durchsucht und der Inhalt aufgeteilt in Verzeichnisse und Dateien dargestellt.

Mit dem Button "Ende" soll das Programm beendet werden.

Das GUI haben wir bereits erstellt.

Demzufolge müssen wir uns als nächstes mit den Algorithmen beschäftigen. Wir wissen, dass dieser in den beiden "event handler" der Buttons programmiert wird.

Algorithmus "Inhalte einfügen"

Beschreibung

Beschreiben sie möglichst genau wie und was das Programm in der korrekten Abfolge machen soll.

Dabei sollen auch mögliche Fehler getestet und abgefangen werden.

Ablauf

1. Algorithmus soll in Worten beschreiben. * 2. Daraus Struktogramm erstellen. *

3. Umsetzung in Java, codieren **

4. testen **

* Gruppenarbeit, ** Einzelarbeit 9

(6)

Algorithmus "Inhalte einfügen"

Wie sie oben sehen sind die Eintragungen 1. untereinander dargestellt

2. Unterscheidbar, Verzeichnis bzw. Datei 3. mit einem Namen versehen

Klasse File

Ein Objekt der Klasse File kann für den Namen einer Datei als auch für Namen von Verzeichnissen stehen, z.B.

File name = new File("C:\test");

// der Pfad muss bestehen String[] inhalt = name.list();

String Array/Feld

Die einzelnen Inhalte haben alle Informationen eines Eintrages, wie Name/Typ/Grösse usw.

[0] [1] [2] [3] [4]

01_Programme 02_Powerpoint Microsoft Excel… Microsoft Project… Microsoft Word…

11

(7)

Klasse File

Ein Objekt der Klasse File kann für den Namen einer Datei als auch für Namen von Verzeichnissen stehen, z.B.

File name = new File("C:\test");

// der Pfad muss bestehen String[] inhalt = name.list();

String Array/Feld

Die einzelnen Inhalte haben alle Informationen eines Eintrages, wie Name/Typ/Grösse usw.

[0] [1] [2] [3] [4]

01_Programme 02_Powerpoint Microsoft Excel… Microsoft Project… Microsoft Word…

Einige Methoden der Klasse File

Konstruktoren Beschreibung

File(String pfad) pathist ein Datei- oder Verzeichnisname File(String dir, String name) dirist ein Verzeichnisname;

nameist ein Datei- oder Verzeichnisname File(File dir, String name) dirist ein Verzeichnis von Typ File;

nameist ein Datei- oder Verzeichnisname 13

(8)

Einige Methoden der Klasse File

Methoden Beschreibung

boolean exist() Liefert true, wenn die Datei im Dateisystem existiert.

boolean delete() Löscht die Datei, bzw. das Verzeichnis und liefert truezurück falls der Löschvorgang erfolgreich war.

boolean canRead() prüft auf Leserechte.

boolean canWrite() prüft auf Schreibrechte.

String getName() Liefert den Dateinamen ohne Pfad zurück.

String getPath() Liefert den Pfadanteil zurück.

boolean isDirectory() Liefert true, falls es sich um ein Verzeichnis handelt, sonst false.

boolean isFile() Liefert true, falls es sich um eine Datei handelt, sonst false.

String[] list() liefert Sting-Array mit allen Eintragungen zurück.

Algorithmus "Inhalte einfügen"

Beschreibung 15

(9)

Codeausschnitt

private File verzeichnis;

private DefaultListModel<String> verzeichnisse, dateien;

verzeichnisse = new DefaultListModel<String>();

JList<String> list_verzeichnisse = new JList<String>(verzeichnisse);

list_verzeichnisse.setBounds(32, 252, 231, 141);

contentPane.add(list_verzeichnisse);

dateien = new DefaultListModel<String>();

JList<String> list_dateien = new JList<String>(dateien);

list_dateien.setBounds(310, 252, 292, 141);

contentPane.add(list_dateien);

17

(10)

Code für Button "Inhalte anzeigen"

btnInhaltAnzeigen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

verzeichnisse.clear();

dateien.clear();

if (tfVerzeichnis.getText().isEmpty())

JOptionPane.showMessageDialog(null, "Verzeichnisname fehlt!");

else {

verzeichnis = new File(tfVerzeichnis.getText());

if (verzeichnis.exists() && verzeichnis.isDirectory()) { String[] inhalt = verzeichnis.list();

for (String eintrag : inhalt) {

File f = new File(verzeichnis, eintrag);

if (f.isDirectory())

verzeichnisse.addElement(eintrag);

else dateien.addElement(eintrag);

} // for

} // verzeichnis.exists() && verzeichnis.isDirectory()

else JOptionPane.showMessageDialog(null,"Verzeichnis existiert nicht!");

} // else Verzeichnis nicht leer } // actionPerformed

}); // addActionListener

Codeausschnitt: Button Ende

btnEnde.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

int result = JOptionPane.showConfirmDialog(null,"Wollen sie das

Programm wirklich beenden", "Programm beenden", JOptionPane.YES_NO_OPTION);

switch (result) {

case JOptionPane.YES_OPTION:

System.exit(0);

case JOptionPane.NO_OPTION:

} // Switch

} // actionPerformed }); // addActionListener 19

(11)

Ein- und Ausgabe in Datei

Zeichenorientierte Datenströme

21

(12)

String pfad = "C:"+File.separator+"test"+File.separator;

String dateiname = "adress.txt";

FileWriter fw = new FileWriter(pfad+dateiname,true); // true für anhängen BufferedWriter datei_ausgabe = new BufferedWriter(fw);

datei_ausgabe.write("Hallo");

datei_ausgabe.newLine();

datei_ausgabe.flush(); // nur Buffer in File schreiben datei_ausgabe.close(); // schreiben und schliessen

Daten schreiben (Writer)

String pfad = "C:"+File.separator+"test"+File.separator;

String dateiname = "adress.txt";

FileReader fr = new FileReader(pfad+dateiname);

BufferedReader datei_eingabe = new BufferedReader(fr);

String zeile = datei_eingabe.readLine();

while (zeile != null)

{ // bis letzte Zeile im File System.out.println(zeile);

zeile = datei_eingabe.readLine();

} // bis keine Zeile mehr in File datei_eingabe.close();

Daten lesen (Reader)

23

(13)

Aufgabe

1. Erstellen sie das nebenstehendes GUI.

- 2 JTextfield - 2 JButton

- 1 JList mit DefaultListModel

2. Speichern sie die Eingaben (Vorname und Nachname) in das File ab. Button "speichern"

Kontrollieren sie den Inhalt mit dem Editor.

3. Lesen sie die Daten aus dem File ein und geben sie die Informationen Zeilenweise aus.

-> siehe Button "Daten aus …"

Pfad und Dateiname seinen statisch c:\test\adress.txt

Pfad und Dateinamen festlegen

// Klasse

public class Speichern1 extends JFrame { private JPanel contentPane;

// File.separator ist bei WIN "\" bei Linux "/"

private String pfad = "C:"+File.separator+"test"+File.separator;

private String dateiname = "adress.txt";

… 25

(14)

Auszug aus Konstruktor

public Speichern1() throws IOException {

setTitle("Datei schreiben und lesen (Hagger)");

// muss hier definiert werden, da datei_ausgabe in mehreren // Methoden verwendet wird

FileWriter fw = new FileWriter(pfad+dateiname,true);

BufferedWriter datei_ausgabe = new BufferedWriter(fw);

Ausgabefenster (JList rechts)

btnAusgabe.setBounds(133, 38, 146, 94);

contentPane.add(btnAusgabe);

DefaultListModel<String> daten = new DefaultListModel();

JList list = new JList(daten);

list.setBounds(289, 38, 124, 212);

contentPane.add(list);

27

(15)

addWindowListener beim Drücken von X

//Abschalten des Standard-Verhaltens für das Schließen des Fensters setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

//Neues Verhalten für das Schliessen des Fensters addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) { try {

datei_ausgabe.close(); // Datei schliessen } catch (IOException e1) {

e1.printStackTrace();

}

System.exit(0); // Programm verlassen } // windowClosing

}); // addWindowListener

btnSpeichern (schreiben in Datei)

btnSpeichern.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

try {

datei_ausgabe.write(txtVorname.getText());

datei_ausgabe.write(";");

datei_ausgabe.write(txtNachname.getText());

datei_ausgabe.newLine();

datei_ausgabe.flush(); // Buffer in File schreiben } catch (IOException e) {

e.printStackTrace();

} // try .. catch } // actionPerformed

}); // btnSpeichern.addActionListener 29

(16)

btnAusgabe (lesen aus Datei)

btnAusgabe.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

try {

BufferedReader datei_eingabe = new BufferedReader(new FileReader(pfad+dateiname));

daten.clear(); // JList loeschen

String zeile = datei_eingabe.readLine(); // erste Zeile einlesen while (zeile != null) {

daten.addElement(zeile); // Zeileninhalt in JList

zeile = datei_eingabe.readLine(); // naechste Zeile einlesen } // while solange noch Zeilen

datei_eingabe.close(); // Datei schliessen } catch (IOException e) {

e.printStackTrace();

} // try .. catch } // actionPerformed }); // btnAusgabe.addActionListener

Zusammenfassung/Hausaufgaben

- Klasse File mit Konstruktor und Methoden - Daten schreiben

- Daten lesen

Hausaufgaben

- Übung aus Folie nochmals machen und Code verstehen - Übungen fertigstellen, nochmals lösen

31

Referenzen

ÄHNLICHE DOKUMENTE

account names and security codes stored in both the account's user identification item (in the SYSTEM dictionary) and the. individual file definition items within

AACCCUGAUGGAGGU-CCGUAG-CGAUUCUG-ACGUGCAAAUCGAUCGUCGGAGCUGGGU AACCCUGAUGGAGGU-CCGUAG-CGAUUCUG-ACGUGCAAAUCGAUCGUCGGAGCUGGGU

Reference Type of study and date Study population Most common pre-existing comorbidities associated with patients with severe SARS-CoV-2 infection (hospitalised).. Arentz et

“Cognition”[MeSH] OR cognition[tiab] OR “cognitive function”[tiab] OR “self awareness”[tiab] OR self-awareness[tiab] OR “Awareness”[MeSH] OR awareness[tiab] OR

In addition to providing expanded file storage space, the file server is a mechanism for user sharing and exchange of files/documents. As indicated, the server

NortTlally the 1 K byte RAM buffer is set up to contain the rleader of the sector to be read and the disk state machine state compares this to the data stream corn ing off

This new file, known as MEM-BRAIN, embodies a new disk form, a new head positioning principle, a different data buffering concept, and a larger data storage in

The Burroughs Scientific Processor file memory exploits recently developed charge-coupled device memory technology to provide file access performance balanced to the