0 Daumen
470 Aufrufe

Ich hab die Aufgabe, aus einer Textdatei einzulesen und dabei irgendwie eine lineare Liste zu erstellen. Hier mein Code (hab schon bisschen dran gearbeitet, Name der Textdatei tvshows.txt):

public class TVShowParser {

    private PI2LinearList<TVShowParser> TVshow= new PI2LinearList<>();
   
    /**
    * Liest die Textdatei ein, deren Name und evtl. Pfad durch den Parameterwert
    * gegeben sind, erzeugt daraus eine entsprechende lineare Liste von TV-Serien und
    * gibt diese zurück.
    * <p>
    * In der Textdatei befindet sich pro Zeile jeweils die Information zu einer
    * Episode. Insgesamt gibt es dabei {@link TVShowParser#NO_OF_EPISODE_ENTRIES}
    * Einträge. Der Name der TV-Serie befindet sich an Index {@link
    * TVShowParser#TVSHOW_TITLE_INDEX}, die Nummer der Staffel an Index {@link
    * TVShowParser#SEASON_INDEX}, die Nummer der Episode an Index {@link
    * TVShowParser#EPISODE_NUMBER_INDEX} und der Name der Episode an Index {@link
    * TVShowParser#EPISODE_TITLE_INDEX}. Eine Zeile hat also die folgende Form:
    * <p>
    * [Name der TV-Serie];[Staffelnummer];[Episodennummer];[Episodentitel]
    * <p>
    * Falls eine Zeile der Textdatei nicht diesem Format entspricht, wird sie
    * ignoriert. Die Methode geht davon aus, dass in beiden Titeln kein Semikolon
    * vorkommt. Falls das doch der Fall sein sollte, ist das Verhalten undefiniert.
    *
    * @param filePath Der Name und evtl. Pfad der einzulesenden Textdatei.
    *
    * @return Eine lineare Liste mit TV-Serien entsprechend der Informationen in der
    *        Textdatei.
    *
    * @throws IllegalArgumentException Falls das Argument den Wert {@code null} hat
    *                                  oder eine leere Zeichenkette ist.
    * @throws IOException              Falls ein Problem beim Lesen der Textdatei
    *                                  auftritt (Fehler beim Lesen der Datei, Datei
    *                                  existiert nicht, Datei kann nicht gelesen
    *                                  werden, ...).
    */

    public PI2LinearList<TVShow> readTVShows(final String filePath)

        throws IOException {
            FileReader fr = new FileReader("tvshows.txt");
            BufferedReader br = new BufferedReader(fr);
            String zeile = "";

        while( (zeile = br.readLine()) != null )
        {
        System.out.println(zeile);
        }

        br.close();
        filePath=zeile;
        return filePath;

    } 
}

Ganz oben standen noch paar Sachen welche nicht von Relevanz sind (hab eine Liste erstellt). Außerdem hab ich versucht, die Methode zu vervollständigen aber es klappt irgendwie nicht.

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Textdatei einlesen und lineare Liste erstellen

In der Aufgabenstellung hast du bereits begonnen, eine Methode in einer Java-Klasse zu entwickeln, mit der eine Textdatei eingelesen und deren Inhalt in eine lineare Liste eingefügt werden soll. Deinem bisherigen Code fehlen jedoch noch einige wesentliche Teile für die korrekte Funktionalität. Ich werde dir im Folgenden eine ausführliche Anleitung geben, wie du deinen Code vervollständigen kannst.

1. Vorbereitung:
- Definiere eine Klasse TVShow, die die Daten einer TV-Serie (wie Name der TV-Serie, Staffelnummer, Episodennummer, Episodentitel) speichern kann. Diese Klasse sollte über entsprechende Konstruktoren und evtl. Getter-Methoden verfügen.

2. Korrektur und Vervollständigung der readTVShows Methode:
- Du musst den Dateipfad filePath nutzen, statt "tvshows.txt" hart zu kodieren.
- Die Methode sollte eine Instanz von PI2LinearList<TVShow> zurückgeben, statt des bisherigen filePath.

3. Fehlerbehandlung:
- Du solltest überprüfen, ob der übergebene filePath null oder leer ist, und in diesem Fall eine IllegalArgumentException werfen.

4. Durchlaufe die Dateizeilen und fülle die Liste:
- Für jede Zeile in der Datei, trenne die Werte anhand des Semikolons. Erstelle dann eine Instanz von TVShow mit diesen Werten und füge diese zur Liste hinzu.

Hier ist ein überarbeitetes Beispiel deiner Methode unter Verwendung aller obigen Vorschläge:

java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class TVShowParser {

    public List<TVShow> readTVShows(final String filePath)
            throws IOException {
        if(filePath == null || filePath.trim().isEmpty()) {
            throw new IllegalArgumentException("filePath darf nicht null oder leer sein!");
        }
        
        List<TVShow> TVshows = new LinkedList<>();
        FileReader fr = new FileReader(filePath);
        BufferedReader br = new BufferedReader(fr);
        
        String zeile;
        while ((zeile = br.readLine()) != null) {
            String[] data = zeile.split(";");
            if(data.length >= 4) { // Sicherstellen, dass alle benötigten Informationen vorhanden sind
                TVShow show = new TVShow(data[0], Integer.parseInt(data[1]), Integer.parseInt(data[2]), data[3]);
                TVshows.add(show);
            }
        }
        
        br.close();
        return TVshows;
    }
}


Hier ist die benötigte TVShow Klasse als Beispiel:

java
public class TVShow {
    private String title;
    private int season;
    private int episodeNumber;
    private String episodeTitle;

    public TVShow(String title, int season, int episodeNumber, String episodeTitle) {
        this.title = title;
        this.season = season;
        this.episodeNumber = episodeNumber;
        this.episodeTitle = episodeTitle;
    }

    // Getter-Methoden nach Bedarf
}


Beachte, dass PI2LinearList<TVShow> vermutlich eine vereinfachte Version oder ein Synonym für eine Art linearer Liste ist. Ich habe in diesem Beispiel LinkedList verwendet, aber du solltest es durch PI2LinearList<TVShow> ersetzen, falls dies eine spezifische Implementierung in deinem Projekt ist.

Dieser Code beachtet einige grundlegende Programmierprinzipien und bietet eine saubere Lösung für dein Problem. Er beinhaltet auch Fehlerhandling für den Fall, dass der filePath ungültig ist.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community