Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2...

35
Seite 1 Informatik Datenstrukturen und Dateien Th Letschert

Transcript of Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2...

Page 1: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 1

Informatik

Datenstrukturen und Dateien

Th Letschert

Page 2: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 2

Datenstrukturen

Datenstrukturen Sprachelemente zur Speicherung von vielen Daten

Datentyp vs DatenstrukturDatentyp

Format + Operationen für ein Datum z.B. ganze Zahl im 32 Bit 2er Komplement Format, Zeichen in einem Byte in ASCII-Codierung

DatenstrukturKollektion von Speicherstellen die zusammen eine (komplexe) Information ausmachen

Vorgegebene Strukturen (Beispiele)Feld (Array) Daten unter einem Index gespeichert Liste Daten als Folge von Werten gespeichert Abbildung Daten unter einem „Schlüssel“ abgelegt

Selbst definierte Strukturen erfordern meist spezielle Sprachmittel

0110 0010

char c = 'a';

c

2 31

Das Zeichen a

Die Liste [1,2,3]

int[] a = {1,2,3};

Page 3: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 3

Datenstrukturen: Felder (Arrays)

Felder (Arrays)Daten unter einem Index speichern

älteste Datenstruktur in Programmiersprachen

Vorbild: Vektoren und Matrizen in der Mathematik

Wird von allen klassischen Programmiersprachen unterstützt (C, C++, C#, Java, ...)

Felder bestehen aus Feldelementen, die über einen Index angesprochen werden können

Beispiel: Feld mit 10 Elementen

int[] x = new int[10];for (int i=0; i < 10; i++) {

x[i] = i;}

x wird als ein Feld mit 10 Komponenten angelegt und mit 0, 1, .. 9 gefüllt.

Page 4: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 4

Felder (Arrays)

Felder (Arrays)

Geordnet: ein Element nach dem anderen, jedes Element hat einen Index

Homogen: alle Elemente haben den gleichen Typ

Struktur: VariableSpeicher für Elemente

Speicher

Feld-Variableenthält Zeiger (Adresse) auf den Speicherbereich für die Elemente

Speicherplatz für die Feldelemente

Page 5: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 5

Felder (Arrays)

Felder (Arrays) definierenVariante 1 / Erzeugung eines Felds

int [] a = new int[10];

a

1. Eine Feld-Variable a wird angelegt.2. Zusammenhängender Speicherplatz für die Feldelemente wird angelegt und mit 0-en gefüllt. 3. Die Feld-Variable wird mit der Adresse des Speicherplatzes gefüllt.

Feld-Variable

Feldelement-Typ

Feld-Größe

Speicher

0 0 0 0 0 0 0 0 0 0

Page 6: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 6

Felder (Arrays)

Felder (Arrays) definierenVariante 2 / Erzeugung eines Felds

a

1. Eine Feld-Variable a wird angelegt.2. Zusammenhängender Speicherplatz für die Feldelemente wird angelegt und mit den Werten gefüllt.3. Die Feld-Variable wird mit der Adresse des Speicherplatzes gefüllt.

Feld-Variable

Feldelement-Typ

Feld-Elemente

Speicher

int [] a = {1,2,3,4,5,7,8,9,0};

1 2 3 4 5 6 7 8 9 0

Page 7: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 7

Felder (Arrays) : Beispiele

For-Schleife: Felder (Arrays) durchlaufen

Feld durchlaufen mit klassische Schleifefor ( int i = 0; i < feld.length; i++ )

... verarbeite feld[i] ....

Feld durchlaufen mit „for-each“ Schleife

for ( Typ elem: feld )... verarbeite elem ....

Nur lesender Zugriff möglich

Für jedes elem in feld mache Folgendes

Für jeden Index i zwischen 0 und der Feldlänge feld.length mache Folgendes

Page 8: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 8

Felder (Arrays) : Beispiele

Beispiel: Quadratzahlen von 0 bis 19

0. 1. 4. 9. 16. 25. 36. 49. 64. 81. 100. 121. 144. 169. 196. 225. 256. 289. 324. 361.

„For-each“-Schleife über den Inhalt des Feldes

Zähl-Schleife: 0 .. 19

Feld mit 20 Elementen, Index 0 .. Index 19

int[] quadZahl = new int[20];

for (int i=0; i < quadZahl.length; i++) { quadZahl[i] = i*i;}

for (int v : quadZahl) { System.out.print(v + ". ");}System.out.println();

Page 9: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 9

Felder (Arrays) : Beispiele

Beispiel: Fakultäten f[i] = i! berechnen und ausgeben (1)

1 1 2 6 24 120 720 5040 40320 362880

Funktion: nimmt Feld an und verändert es

static void compFak(int[] a) { a[0] = 1; for (int i = 1; i<a.length; i++) {

a[i] = a[i-1]*i; }}

public static void main(String args[]) { int[] f = new int[10]; compFak(f); for (int v : f) { System.out.print(v + " "); } System.out.println();}

Page 10: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 10

Felder (Arrays) : Beispiele

Beispiel: Fakultäten f[i] = i! berechnen und ausgeben (2)

1 1 2 6 24 120 720 5040 40320 362880

Funktion: erzeugt Feld und gibt es zurück

static int[] compFak() { int[] a = new int[10]; a[0] = 1; for (int i = 1; i<a.length; i++) { a[i] = a[i-1]*i; } return a;}

public static void main(String args[]) { int[] f = compFak(); for (int v : f) { System.out.print(v + " "); } System.out.println();}

Page 11: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 11

Felder (Arrays) : Beispiele

Beispiel: Suche nach dem Maximum in einem Feld

static int max(int[] a) { int max = a[0]; for (int i = 1; i<a.length; i++) { if (a[i] > max) { max = a[i]; } } return max;}

public static void main(String args[]) { int[] f = new int[]{4,3,0,1,2,3,7,4,5,2,4,7}; System.out.println(max(f));}

7

Page 12: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 12

Felder (Arrays) : Zuweisung und Vergleich

Felder zuweisen'=' kopiert bei Feldern nicht den Inhaltsondern nur die Zeiger

int [] a1 = { 1, 2, 3 };int [] a2 = { 9, 8, 7 };a2 = a1;

a1

a2 = a1;

1 2 3

a2 9 8 7

a1 1 2 3

a2

vorher

nachher

Zuweisung

9 8 7

Page 13: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 13

Felder (Arrays) : Zuweisung und Vergleich

Felder vergleichen'==' testet bei Feldern nicht auf gleichen Inhaltsondern auf Identität

int [] a1 = { 1, 2, 3 };int [] a2 = { 1, 2, 3 }; a1==a2 ist falsch!

a1

int [] a1 = { 1, 2, 3 };int [] a2 = a1; a1==a2 ist wahr!

1 2 3

a2 1 2 3

a1 1 2 3

a2

unterschiedliche Zeiger in a1 und a2

gleiche Zeiger in a1 und a2

Page 14: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 14

Felder (Arrays) und Funktionen

Felder als Funktionsargumente– Zahlwerte als Argumente werden in die Parameter-Variablen der Funktion

kopiert

– Felder als Argumente werden nicht kopiert.Lediglich der Verweis auf den Elementspeicher wird zu Funktion kopiert.

int x = 5;int [] a = new int[10];f(a,x);

static void f(int[] a, int v) { for (int i = 1; i<a.length; i++) {

a[i] = a[i]+v; }}

5x

a

f(a,x); 5

5va

Übertragung der Argumente

Aufruf der Funktion

Parameter-Variablen der Funktion

Variablen in main

Page 15: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 15

Felder (Arrays) voller Felder

Mehrdimensionale Felder– Felder können Felder enthalten– Dies kann zur Modellierung mehrdimensionaler Felder genutzt

werden.

matrixint[][] matrix = { { 10, 20, 30 },

{ 21, 22, 23 },

{ 31, 32, 33 } };

for (int[] zeile : matrix) {

for (int elem : zeile) {

System.out.print(elem + " ");

}

System.out.println();

}

10 20 30 21 22 23 31 32 33

31 32 33

10 20 30

21 22 23

Page 16: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 16

Felder (Arrays) voller Felder

Mehrdimensionale Felder– Beispiel Matrix-Multiplikation (1)

/** * Matrixmultiplikation. * @param matrix1 MxK Matrix * @param matrix2 KxN Matrix * @return MxN Matrix als Produkt von matrix1 und matrix2; * null falls die Dimensionen der Matrizen nicht passen */static double[][] matmult(double[][] matrix1, double[][] matrix2) { int M = matrix1.length; // Zeilen matrix1 int K = matrix2.length; // Zeilen matrix2 int N = matrix2[0].length; // Spalten matrix2

if (K != matrix1[0].length) { // Spalten matrix1 != Zeilen matrix2return null;

}

double[][] resultat = new double [N][M];

for(int i = 0; i < N; i++) {for(int j = 0; j < M; j++) {

double s = 0.0;for(int k = 0; k < K; k++) {

s = s+ matrix1[i][k] * matrix2[k][j];}resultat[i][j] = s;

} } return resultat;}

Page 17: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 17

Felder (Arrays) voller Felder

Mehrdimensionale Felder– Beispiel Matrix-Multiplikation / (2) Aufruf der Funktion

public static void main(String args[]) { double[][] matrix1 = {{ 1, 2, 3 }, { 4, 5, 6 }};

double[][] matrix2 = {{ 1, 3 }, { 2, 2 }, { 3, 1 }};

double[][] matrix3 = matmult(matrix1, matrix2);

for (double[] zeile : matrix3) { for (double elem : zeile) System.out.print(elem + " "); System.out.println(); } }}

Page 18: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 18

Felder (Arrays) : Zusammenfassung

Vorteile der Felder– einfache– effiziente

Verwaltung von Mengen gleichartiger Daten

Nachteile der Felder– feste Größe

– Änderung der Größe nicht direkt möglich

muss bei Bedarf simuliert werden(Neues Feld anlegen, Elemente umkopieren)

– Einfügen und Entfernen von Elementen nicht direkt möglich

muss bei Bedarf simuliert werden(umkopieren und verschieben)

Page 19: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 19

Datenstrukturen : Listen

Listen

Definition

def Listen-Variable = Listen-Wert

Beispiel

Zugriff auf Listen-Elementelesend

Listen-Variable.get( Index )

schreibendListen-Variable.add( Index, Wert )

Listen-Variable.add( Wert )

List<Integer> liste = new ArrayList<Integer>();

An einer bestimmten Position einfügen

Am Ende anhängen

Page 20: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 20

Listen

Beispiel: Zahlen einlesen und sortiert ausgeben

Th Letschert

package hallo;

import javax.swing.JOptionPane;import java.util.ArrayList;import java.util.Collections;import java.util.List;

public class Listenbeispiel {

public static void main(String args[]) { List<Integer> liste = new ArrayList<Integer>();

while (true) {String zahlStr = JOptionPane.showInputDialog("Bitte Zahl eingeben");if (zahlStr == null) { break;}int zahl = Integer.parseInt(zahlString);liste.add(zahl);

}

Collections.sort(liste); System.out.println(liste); }

}

Page 21: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 21

Abbildungen

Abbildung (Zuordnung, engl. Map)

Abbildung

Wert-Zuordnung

Beispiel Telefonbuch: Name ~> Nummer

beliebige endliche Tabellen mit 2 Spalten

Schlüssel ~> Wert (Key ~> Value) Beziehung

Notationeng verwandt mit Listen

Definition Map<String, Integer> telefonverz = new HashMap<String, Integer>();

telefonverz ~ { "Hugo" ~> 4711, "Karla" ~> 4712, "Egon" ~> 4713 }

SchlüsselWert

Abb.-Variable

Abb.-Wert

Ideell, kann so (leider) in Java nicht

hingeschrieben werden.

Page 22: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 22

Abbildungen

Abbildung (Zuordnung, engl. Map)

Zugriff auf Map-Elemente lesend

Map-Variable.get( Schlüssel )

schreibendListen-Variable.put( Schlüssel, Wert )

Page 23: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 23

Abbildungen

Th Letschert

Abbildung Beispiel

package hallo;

import java.util.HashMap;import java.util.Map;import javax.swing.JOptionPane;

public class MapBeispiel {

public static void main(String args[]) { Map<String, Integer> telefonverz = new HashMap<String, Integer>();

while(true) {String name = JOptionPane.showInputDialog("Eintrag: Bitte Name eingeben");if (name == null) { break; }String nrString = JOptionPane.showInputDialog("Eintrag: Bitte TelefonNr eingeben");if (nrString == null) { break; }telefonverz.put(name, Integer.parseInt(nrString));

}

System.out.println(telefonverz);

while(true) {String name = JOptionPane.showInputDialog("Suche: Bitte Name eingeben");if (name == null) { break; }JOptionPane.showMessageDialog(null, "Die gesuchte Nr "

+ (telefonverz.get(name) != null ? "ist " + telefonverz.get(name) : "gibt es nicht") );

} }}

Page 24: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 24

Datenmodellierung mit Listen und Abbildungen

Th Letschert

These:(Fast) Alle Informationsstrukturen der realen Welt lassen sich als Mengen, Listen und Abbildungen über Zahlen und Zeichenketten darstellen.

In Programmiersprachen bilde dies nach mit

int / double (für Zahlen)

String (für Zeichen und Zeichenketten)

array (für Listen und Abbildungen mit Schlüssel vom Typ int)

List (für Listen und Mengen)

Map (für Abbildungen)

Page 25: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 25

Datenmodellierung

Th Letschert

Daten-Modellierung

Zentrales Anliegen der Informatik: Informationsstrukturen der realen (Anwendungs-) Welt darstellen.

vielfältige Anwendungen der Datenmodellierung in der Programmierung im System-Entwurf

vielfältige Methoden und Notationenin diversen Programmiersprachenin der Systementwicklung zwischen denen u.U. gewechselt werden muss

Page 26: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 26

Datenstrukturen / Datenmodellierung : Beispiel

Stücklisten-Verwaltung– Stammdaten:

wichtige statische Informationen eines Betriebs über Lieferanden, Kunden, Erzeugnisse etc.

– Stücklisten:Stammdaten zu Erzeugnissen:

„Eine Stückliste beschreibt die mengenmäßige Zusammensetzung eines Erzeugnisses aus seinen Einzelteilen. Die Stückliste gibt dabei an, wie viele Mengeneinheiten eines bestimmten Teils oder einer bestimmten Baugruppe auf untergeordneter Erzeugnisstrukturebene benötigt werden, um eine Einheit des Erzeugnisses auf übergeordneter Erzeugnisstrukturebene herzustellen.“http://wirtschaftslexikon.gabler.de/Archiv/72926/stueckliste-v4.html

– Baukasten-Stückliste:Stücklisten können in unterschiedlicher Form gespeichert werden. Eine davon ist die Baukasten-Stückliste.

„Baukastenstücklisten (englisch: „unit list“) zeichnen sich dadurch aus, dass jeweils nur eine Ebene der Produktstruktur betrachtet wird: Baugruppen erhalten eigene Stücklisten, die in den Stücklisten der übergeordneten Gruppen verwendet werden.“http://de.wikipedia.org/wiki/Stückliste

Page 27: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 27

Datenstruktur : Beispiel

Beispiel Baukasten-Stückliste– Produkt P

besteht aus einem Einzelteil E1 und einer Baugruppe B– Baugruppe B

besteht aus aus zwei Einzelteilen E1 und und einem Einzelteil E2

E1 E1 E1 E2

P BStückliste = Produkt ~> Menge( (Anzahl x (Baugruppe | Teil)) )

Baugruppe = Menge( (Anzahl x (Baugruppe | Teil)) )

Eine Stückliste ist eine Zuordnung - von Produkten (-nummern) - zu Mengen von Paaren - von Anzahl und Baugruppe (-nummern) oder Teil (-nummern).Eine Baugruppe ist eine Menge Paaren bestehend aus Anzahl und Baugruppe oder Teil.

Wie können Stücklisten mit Hilfe von Arrays, Listen und / oder Abbildungen gespeichert werden?

Page 28: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 28

Dateien

Umgang mit Dateien - Beispiele

Der Umgang mit Dateien ist komplex, wir beschränken uns auf einige Beispiele

Datei auswählen

Dateien können durch Eingabe ihres „Pfads“ oder mit einem speziellen Dialog-Fenster ausgewählt werden.

Dateiauswahl durch Angabe eines Pfads

public static void main(String[] args) throws FileNotFoundException {

String fileNane = JOptionPane.showInputDialog("Bitte Datei-Pfad eingeben"); File f = new File(fileNane);

Scanner scan = new Scanner(f);

while (scan.hasNext()) { System.out.println(scan.next()); }}

Der Benutzer wird in einem Dialog um die Angabe einer Datei gebeten. Diese wird – falls gefunden – dann wortweise ausgegeben.

Page 29: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 29

Dateien

Dateiauswahl mit Datei-Auswahl-Dialog

Der Benutzer wird in einem Dialog um die Auswahl einer Datei gebeten. Diese wird dann wortweise ausgegeben.

public static void main(String[] args) throws FileNotFoundException {

File f = null; JFileChooser fc = new JFileChooser(); int chooseResult = fc.showDialog(null, "Bitte Datei auswählen"); if (chooseResult == JFileChooser.APPROVE_OPTION) {

f = fc.getSelectedFile(); }

if (f != null) {Scanner scan = new Scanner(f);while (scan.hasNext()) {

System.out.println(scan.next());}scan.close();

}}

Page 30: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 30

Dateien

Datei analysierend lesen

Text-Dateien können auf verschiedene Art „analysierend“ gelesen werden.– Zeilenweise lesen– Wortweise lesen– Zahlenweise lesen– ...

File f = ...;Scanner scan = new Scanner(f);while (scan.hasNextLine()) {

System.out.println(scan.nextLine());}scan.close();

File f = ...;Scanner scan = new Scanner(f);while (scan.hasNextInt()) {

System.out.println(scan.nextInt());}scan.close();

File f = ...;Scanner scan = new Scanner(f);while (scan.hasNext()) {

System.out.println(scan.next());}scan.close();

Page 31: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 31

Dateien

Datei schreiben

Text-Dateien können einfach beschrieben werden.– Beispiel 1:

– Beispiel 2:

File f = ...;if (f != null) {

PrintWriter pw = new PrintWriter(f);pw.println("Hallo");pw.close();

}

public static void main(String[] args) throws IOException { String filePath = JOptionPane.showInputDialog("Ausgabe-Datei?"); PrintWriter pw = new PrintWriter(new FileWriter(filePath)); pw.println("Hallo"); pw.println("Welt!"); pw.close();}

Page 32: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 32

Dateien

Datei mit strukturiertem Inhalt lesen

Beispiel: Einlesen einer Tabelle

Anlage; Bezeichnung; Baujahr; Garantie; Typbezeichnung; Stoerungen;283006025; Rollstuhl Venezia XTRA; 2006; 03.10.08; Venezia 923; 4;283006026; Rollstuhl Venezia XTRA; 2006; 03.10.08; Venezia 923; 0;283006041; Hunderolli HappyWuff; 2006; 01.01.10; XZR61E00; 2;287006004; Seniorenrollstuhl Evolution; 2006; 12.12.08; BC61E00; 0;287006007; Seniorenrollstuhl Esprit; 2006; 08.08.09; XZR71A30; 11;287006008; Seniorenrollstuhl Esprit; 2005; 08.08.09; XZR71A30; 9;287006009; Personenrollstuhl Budget; 2006; 04.02.09; XZR51E55; 10;287006010; Seniorenrollstuhl Esprit; 1985; 04.02.09; XZR71A40; 0;287006011; Personenrollstuhl Esprit; 2007; 03.06.09; XZR71A30; 0;287006012; Personenrollstuhl Esprit; 2006; 03.06.09; XZR71A30; 0;287006013; Personenrollstuhl Esprit; 2006; 27.11.09; XZR71A00; 0;287006014; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 1;287006015; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006016; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006017; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006018; Personenrollstuhl Esprit; 2006; 13.11.08; XZR71A30; 5;287006019; Seniorenrollstuhl Esprit; 2006; 22.12.08; XZR71A30; 0;287006020; Personenrollstuhl Esprit; 2006; 14.01.10; XZR71A30; 0;287006021; Personenrollstuhl Esprit; 2006; 13.11.08; XZR71A30; 0;287006024; Personenrollstuhl Esprit; 2006; 30.05.10; XZR71A00; 0;287006025; Personenrollstuhl Esprit; 2006; 30.05.10; XZR71A00; 0;

als

Liste( [ Attribut ~> Wert ] )

Attribut Anlage

Page 33: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 33

Dateien

Datei mit strukturiertem Inhalt lesen

Beispielpublic static void main(String[] args) throws IOException { List<Map<String, String>> stock = new ArrayList<Map<String, String>>();

File f = null; JFileChooser fc = new JFileChooser(); int chooseResult = fc.showDialog(null, "Bitte Datei auswählen"); if (chooseResult == JFileChooser.APPROVE_OPTION) {

f = fc.getSelectedFile(); }

if (f != null) {Scanner scan = new Scanner(f);String header = scan.nextLine();String[] attrName = header.split(";");for(int i =0; i<attrName.length; i++) {

attrName[i] = attrName[i].trim();}

while (scan.hasNextLine()) {Map<String,String> entry = new HashMap<String,String>();String line = scan.nextLine();String[] values = line.split(";");int i = 0;for(String a: attrName) {

String value = values[i++].trim();entry.put(a, value);

}stock.add(entry);

}scan.close();

Page 34: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 34

Dateien

... und wieder in Datei ausgeben

f = null;fc = new JFileChooser();chooseResult = fc.showDialog(null, "Bitte Datei auswählen");if (chooseResult == JFileChooser.APPROVE_OPTION) {

f = fc.getSelectedFile();}

if (f != null) {PrintWriter pw = new PrintWriter(f);for (String attr: attrName) {

pw.print(attr+";\t");}pw.println();for(Map<String, String> entry: stock) {

for (String key: attrName) {pw.print(entry.get(key)+";\t");

}pw.println();

}pw.close();}

}

Page 35: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp

Seite 35

Dateien

Alle Dateien eines bestimmten Verzeichnisses mit einer bestimmten Endung lesen

private static File findDirectory(String msg) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = fc.showDialog(null, msg); if (returnVal == JFileChooser.APPROVE_OPTION) { return fc.getSelectedFile(); } else return null;}

private static File[] findFilesInDirectory(File directory, final String extension) { FilenameFilter extensionFilter = new FilenameFilter() { public boolean accept(File f, String name) { if (name.endsWith(extension)) { return true; } else { return false; } } }; return directory.listFiles(extensionFilter);}

public static void main(String[] args) { File dir = findDirectory("CSV-Verzeichnis"); File[] csvFiles = findFilesInDirectory(dir, "csv"); for (File f: csvFiles) { System.out.println(f); }}