DCV 2023 03/Strukturierte Programmierung Uebungen/Datenstroeme: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Gyula (Diskussion | Beiträge)
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:


=== Aufgabe: Verzeichnis auflisten ===
=== Aufgabe: Verzeichnis auflisten ===
Mit der Hilfe von {{JSL|java.io.File}} lese den Inhalt des definierten Verzeichnisses und erstelle einen Ausdruck mit der Liste der Dateien.
Mit der Hilfe von {{JSL|java.io.File}} soll der Inhalt eines bestimmten Verzeichnisses ausgegeben werden. Gib hierfür eine Liste aller Dateien aus.


[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/File.html Dokumentation von File]
[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/File.html Dokumentation von File]


Erweiterung: Liste die Dateien in der Rheinfolge: Unterverzeichnisse, Dateien nach Größe absteigend
=== Bonusaufgabe: Verzeichnis auflisten in Reihenfolge ===
 
Liste die Dateien in folgender Rheinfolge auf.
* Unterverzeichnisse
* Dateien nach Größe absteigend


=== Aufgabe: Dateien Zählen und Summen ===
=== Aufgabe: Dateien Zählen und Summen ===


Mit der Hilfe von {{JSL|java.io.File}} lese den Inhalt des definierten Verzeichnisses und kalkuliere:
Mit der Hilfe von {{JSL|java.io.File}} soll der Inhalt eines bestimmten Verzeichnisses verarbeitet und folgendes kalkuliert werden:
* Anzahl Dateien im Verzeichnis
* Anzahl der Dateien im Verzeichnis
* Summe der Größe der Dateien (ohne der Größe von Unterverzeichnisse)
* Summe der Größe der Dateien (ohne der Größe von Unterverzeichnissen)


=== Aufgabe: Dateien Zählen und Summen (Rekursiv) ===
=== Aufgabe: Dateien Zählen und Summen (Rekursiv) ===


Mit der Hilfe von {{JSL|java.io.File}} lese den Inhalt des definierten Verzeichnisses '''und alle Unterverzeichnisse''' und kalkuliere:
Mit der Hilfe von {{JSL|java.io.File}} soll der Inhalt eines bestimmten Verzeichnisses '''und aller Unterverzeichnisse''' verarbeitet und folgendes kalkuliert werden:
* Anzahl Dateien im Verzeichnis
* Anzahl Dateien in allen Verzeichnissen
* Summe der Größe der Dateien (ohne der Größe von Unterverzeichnisse)
* Summe der Größe der aller Dateien


=== Aufgabe: Größte Datei suchen ===
=== Aufgabe: Größte Datei suchen ===


Frage den Anwender nach einem Dateipfad. Suche nach der größten Datei in dem Verzeichnis inkl. seine Unterverzeichnisse.
Frage den Anwender nach einem Dateipfad. Suche nach der größten Datei in dem Verzeichnis inkl. seiner Unterverzeichnisse.


Gebe aus dem relativen Pfad vom Startverzeichnis und die Größe
Gib den relativen Pfad vom Startverzeichnis und die Größe aus.


=== Aufgabe: Datei nach Name suchen ===
=== Aufgabe: Datei nach Name suchen ===
Zeile 30: Zeile 34:
Frage den Anwender nach einem Dateipfad und nach einem Suchkriterium. Suche alle Dateien im Verzeichnis, inkl. Unterverzeichnisse, deren Name dem Suchkriterium entspricht.
Frage den Anwender nach einem Dateipfad und nach einem Suchkriterium. Suche alle Dateien im Verzeichnis, inkl. Unterverzeichnisse, deren Name dem Suchkriterium entspricht.


Liste die Dateien mit deren relativen Pfad.
Liste die Dateien mit deren relativem Pfad.


== Streams ==
== Streams ==
Zeile 49: Zeile 53:
=== Aufgabe: File schreiben ===
=== Aufgabe: File schreiben ===
Lies, solange Eingaben vom Benutzer, bis eine Leerzeile eingegeben wird. Dann schreibe die Eingaben in eine Datei. Der Pfad soll lauten '''assets/tmp/output.txt'''.
Lies, solange Eingaben vom Benutzer, bis eine Leerzeile eingegeben wird. Dann schreibe die Eingaben in eine Datei. Der Pfad soll lauten '''assets/tmp/output.txt'''.
=== '''Bonusaufgabe: File lesen und schreiben''' ===
Erstelle ein Programm, Bankkonto Daten in einem Text File speichert.
* Beim Start des Programms frage (Konsole) nach dem Namen des Anwenders.
* Entsprechend der Name, öffnen im Verzeichnis '''assets/bank''' den "name".txt File und lese der aktuelle Kontostand aus
** Falls die Datei (der Konto) noch nicht existiert, es handelt um ein neues Konto mit 100 EUR Guthaben.
* Zeige an den Anwender sein aktueller Kontostand
* Frage nach einer Transaktion (positiver Wert = Einzahlen, negativer Wert = Auszahlen)
* Speichere den neuen Kontostand in der gleichen "name".txt Datei


=== Aufgabe: Daten tabellarisch darstellen ===
=== Aufgabe: Daten tabellarisch darstellen ===

Aktuelle Version vom 19. April 2023, 09:05 Uhr

Files

Aufgabe: Verzeichnis auflisten

Mit der Hilfe von java.io.File soll der Inhalt eines bestimmten Verzeichnisses ausgegeben werden. Gib hierfür eine Liste aller Dateien aus.

Dokumentation von File

Bonusaufgabe: Verzeichnis auflisten in Reihenfolge

Liste die Dateien in folgender Rheinfolge auf.

  • Unterverzeichnisse
  • Dateien nach Größe absteigend

Aufgabe: Dateien Zählen und Summen

Mit der Hilfe von java.io.File soll der Inhalt eines bestimmten Verzeichnisses verarbeitet und folgendes kalkuliert werden:

  • Anzahl der Dateien im Verzeichnis
  • Summe der Größe der Dateien (ohne der Größe von Unterverzeichnissen)

Aufgabe: Dateien Zählen und Summen (Rekursiv)

Mit der Hilfe von java.io.File soll der Inhalt eines bestimmten Verzeichnisses und aller Unterverzeichnisse verarbeitet und folgendes kalkuliert werden:

  • Anzahl Dateien in allen Verzeichnissen
  • Summe der Größe der aller Dateien

Aufgabe: Größte Datei suchen

Frage den Anwender nach einem Dateipfad. Suche nach der größten Datei in dem Verzeichnis inkl. seiner Unterverzeichnisse.

Gib den relativen Pfad vom Startverzeichnis und die Größe aus.

Aufgabe: Datei nach Name suchen

Frage den Anwender nach einem Dateipfad und nach einem Suchkriterium. Suche alle Dateien im Verzeichnis, inkl. Unterverzeichnisse, deren Name dem Suchkriterium entspricht.

Liste die Dateien mit deren relativem Pfad.

Streams

Im folgenden geht es um das einlesen und verarbeiten von Textdateien. Erstelle wo möglich und nötig für die einzelnen Schritte eine eigene Methode. Verwende dazu die Datei simpleText.txt im resources/txt/ Ordner.

//Bytestrom
InputStream inputStream = Objects.requireNonNull(Your_class_name_here.class.getClassLoader().getResourceAsStream("txt/simpleText.txt");
//Zeichenstrom
Reader reader = new InputStreamReader(Objects.requireNonNull(Your_class_name_here.class.getClassLoader().getResourceAsStream("txt/simpleText.txt")));

//Bsp.: Scanner
Scanner scanner = new Scanner(inputStream);
//Bsp.: BufferedReader
BufferedReader bufferedReader = new BufferedReader(reader);

Aufgabe: File schreiben

Lies, solange Eingaben vom Benutzer, bis eine Leerzeile eingegeben wird. Dann schreibe die Eingaben in eine Datei. Der Pfad soll lauten assets/tmp/output.txt.

Bonusaufgabe: File lesen und schreiben

Erstelle ein Programm, Bankkonto Daten in einem Text File speichert.

  • Beim Start des Programms frage (Konsole) nach dem Namen des Anwenders.
  • Entsprechend der Name, öffnen im Verzeichnis assets/bank den "name".txt File und lese der aktuelle Kontostand aus
    • Falls die Datei (der Konto) noch nicht existiert, es handelt um ein neues Konto mit 100 EUR Guthaben.
  • Zeige an den Anwender sein aktueller Kontostand
  • Frage nach einer Transaktion (positiver Wert = Einzahlen, negativer Wert = Auszahlen)
  • Speichere den neuen Kontostand in der gleichen "name".txt Datei

Aufgabe: Daten tabellarisch darstellen

Erstelle assets/tmp/output.txt Datein mit einem schönen tabellarischen Ausdruck aus der folgenden Arrays:

String[] firstName = {"Alfonso", "Beatrix-Eleonor", "Cecil", "Daniel", "Elmar"};
String[] lastName = {"Klein", "Kinderdorfer", "Al Elmenar", "Schmidt", "Simma"};
int[] age = {40, 78, 5, 18, 81};
String[] place = {"Wien", "Schwarzach", "Wiener Neudorf", "Sankt Pölten", "Sankt Pölten"};
float[] distanceFromCapital = {0f, 654.4f, 12.457634366f, 120.0f, 119.9999f};

Denke daran, dass eine Tabelle Kopfzeile, Trennzeichen haben kann.

Aufgabe: Erstelle eine Klasse für Logging

Der Logging schreibt fortlaufend eine Datei. Es wird nicht überschreiben.

/* 
   severity=1  --> ERROR
   severity=2  --> WARNING
   severity=3  --> INFO

   Ergebnis:
   2022.04.26. 09:30:34 INFO: Guten Morgen! 
   2022.04.26. 09:31:01 WARNING: Kein passende Aufgabe gefunden
   ...
*/
public static void log(int severity, String message){
}

Bonusaufgabe: Log Rotation

Es kann schwerwiegende Konsequenzen haben, wenn eine Software die komplette Festplatte vollschreibt. Aus diesem Grund ist es üblich, dass im Fall die Logdatei die Größe (1 MByte) überschreitet, wird als ".old" umgenannt. Falls eine weitere ".old" Datei existieren würde, wird die überschreiben.

Aufgabe: File einlesen und Ausgeben

Lies das File mit hilfe von Scanner oder BufferedRead ein und gib es aus.

Aufgabe: Buchstaben zählen

Lies das File mit hilfe von Scanner oder BufferedRead ein.

  1. Gib die Anzahl der Buchstaben aus
  2. Erstelle eine Methode welche nur einen bestimmten Buchstaben des Texts zählt, welcher als Parameter mitgegeben wird.
  3. Erstelle eine Methode welche ein char[] von Bestimmten Buchstaben des Texts zählt. Das char[] soll als Parameter mitgegeben werden können. Es soll nur die Gesamtzahl aller Vorkommnisse der Buchstaben gezählt werden. Wie oft ein einzelner Buchstabe vorkommt ist hier uninteressant.

Tip zu 2)

System.out.println(countChar(text, 'a'));

Tip zu 3)

char[] charsToCount = new char[]{'a', 'z', 'e'};
System.out.println(countChars(text, charsToCount));

Aufgabe: Wörter zählen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Und gib die Anzahl der Wörter aus. Es muss nicht exakt sein.

Aufgabe: Dynamisches Wörter zählen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Frage den Benutzer nach einem bestimmten Wort und gib aus wie oft es vorkommt.

Aufgabe: Dynamisches Wörter ersetzen

Lies das File mit Hilfe von Scanner oder BufferedRead ein. Frage den Benutzer nach zwei Wörtern. Das erste Wort soll durch das zweite Wort im Text ersetzt werden. Gib dannach den Text aus.