Lesen und Schreiben von Dateien in Java

student26

Mitglied
Hallo Leute,
ich habe eine Aufgabe zu lösen. Ich habe sie fertiggemacht, aber ich weiß nicht, ob das jetzt richtig ist. Kann mir jemand weiterhelfen?


Aufgabe: Wir haben als Datenquelle eine xml- Datei, die eine Zitatsammlung enthält. Wir möchten mit Hilfe der .xml- Datei, eine Datei mit Zitaten erstellen, die jedes Zitat in Anführungszeichen gefolgt von dem Namen der Person und der Beschreibung in einer neuen Zeile enthält.
Die allgemeinen Ein- und Ausgabeströme sind System.out für die Standardausgabe, System.in für die Standardeingabe, die Tastatur und System.err für Fehlermeldungen.
System.err hängt vom Rechner und Betriebssystem ab und ist meistens auch der Bildschirm, kann aber auf einen Drucker oder in eine Log-Datei umgeleitet sein.
in, err und out sind Attribute der Klasse System und vom Typ InputStream bzw. PrintStream.
Zum Lesen und Schreiben einer Datei kann man kein Systemdatenstrom benutzen, sondern sich einen Datenstrom definieren.

Zeile für Zeile aus der Datei einlesen, nach den Tags suchen und extrahieren den Inhalt aus dieser Zeile. Dazu kann man eine Methode codieren, der man die Zeile und den Namen des Tags übergeben. Diese gibt dann den Substring aus der Zeile zurück.
Zuweisen einer Variablen "name", einer Variablen "beschreibung" und einer Variablen "zitat".
Die Methode readLine() erzeugt IOExceptions. Fange diese ab und gebe ggf. eine Fehlermeldung aus.

[JAVA=42]import java.io.*;

class Versuch7{

public static void main(String args[]){

try {

BufferedReader buffRead = new BufferedReader(new FileReader("gesamt.xml"));
PrintWriter printWrit = new PrintWriter(new FileWriter ("Daten.txt"));

String name=null;
String beschreibung=null;
String zitat=null;
String zeile=null;



while((zeile = buffRead.readLine()) != null) {

if(zeile.contains("<zitat>")) {
zitat=zeile.substring(11,(zeile.length()-8));

printWrit.println("\""+zitat+"\"");
printWrit.println(name+", "+beschreibung);
printWrit.println();
}

if(zeile.contains("<name>")) {
name=zeile.substring(10,(zeile.length()-7));
}


if(zeile.contains("<beschreibung>")) {
beschreibung=zeile.substring(18,(zeile.length()-15));

}


}


printWrit.close();

buffRead.close();
}
catch (IOException e){
System.out.println("Fehler beim Einlesen der Datei!");
}

}

}



[/code]
 
Zuletzt bearbeitet:
Hast du eine konkrete Frage?

In deinem Catch block hast du zwar eine Ausgabe , dass ein Fehler passiert ist, aber nicht welcher. Dies solltest du zumindest ändern.


Das Auslesen des Zitates solltest du meiner Meinung nach laut Aufgabenstellung in einer eigenen Methode machen und nicht direkt in der Main
 
Zuletzt bearbeitet:
kannst du mir sagen, was ich genau machen muss. ich habe es jetzt nicht verstanden.
Ich weiß nicht, was du meinst.
 
Zuletzt bearbeitet:
Java:
catch(Exception e){

System.out.println(e.toString);
}
z.B.

und:

Dazu kann man eine Methode codieren, der man die Zeile und den Namen des Tags übergeben.

also sollteste du eine Methode schreiben:

Java:
public static String parseLine(String line, String tagname){
//dies musst du nun selbst richtig füllen
}
 
Was das nun soll? XML Zeilenweise lesen ist doch ein Krampf :noe: Die Zeilen können ja
<zitat>bla</zitat>
oder
nur
<zitat>
sein, oder sonstwie... man braucht schon den ganzen Text. Apropos: Ein Beispiel (ggf. Ausschnitt) aus so einer Eingabedatei könnte helfen.
 
Poste map die "gesamt.xml".

Kann man davon ausgehen, dass die Tags IMMER (IMMER) in einer Zeile stehen, wie
<name>Der Name</name>
und NIE so wie
Code:
<name>
    Der Name
</name>
oder so? (Andernfalls würde das Zeilenweise lesen noch überhaupt keineren Sinn machen, als so schon ???:L )
 
Hilfeeeeeeeeee. Ich komm nicht weiter!!!!!!!! Ich muss das bis morgen haben.

Das sind mir immer die richtigen. Wahrscheinlich acht Wochen für Zeit gehabt und 8 Stunden vorher wird mit der Aufgabe angefangen zu arbeiten.

Aber um dir vielleicht noch etwas auf die Sprünge zu helfen:
- die vorhandene Datei in ein File Objekt einlesenund mit einem Scanner durchlaufen
- mit startsWith() den Zeilenanfang abfragen und die Position merken
- Start der nächsthöheren Position bis zur der Position am Ende (endsWith()) in deine Datei schreiben
- Fertig

Viel Erfolg morgen
 
Zuletzt bearbeitet von einem Moderator:
@Student26

poste mal wieder deinen Code so wie du Ihn jetzt hast und lad auch mal eine deiner Datein hoch die du lesen musst, so dass wir sehen was genau deine Aufgabe ist.



Weiters solltest du einmal schreiben wo nun aktuell deine Probleme sind, welche Fehlermedungen du bekommst (eine Meldung ala ich hab da einen Felher oder es funktioniert nicht sind dann nicht sehr hilfreich. Poste den StackTrace)
 

Neue Themen


Zurück
Oben