Zum Inhalt springen

BufferedReader und BufferedWriter


Kiki1988

Empfohlene Beiträge

Hallo zusammen,

ich möchte eine CSV-Datei zeilenweise auslesen bzw. schreiben, weiß aber nicht wie ich mit dem BufferedReader bzw. BufferedWriter umgehen soll.

Das ist der Code den ich hab, die ersten beiden Methoden sollten richtig sein; nur bei readPersons und writePersons bin ich am verzweifeln.

/**

 * Erzeugt aus einem Datensatz ( mit dem Format "<Vorname>;<Nachname>;<Geschlecht>;<Alter>")

 * ein Personen-Objekt.

 * @param line Zeile aus CSV-Datei

 * @return Personen-Objekt

 */	

Person createPerson(String line){

	StringTokenizer st = new StringTokenizer(line, ";");

	Person irgendwer = new Person(st.nextToken(), st.nextToken(), st.nextToken(), st.nextToken());

	return irgendwer;

	}


/**

 * Erzeugt aus dem übergebenen Person-Objekt einen Datensatz

 * @param person Personen-Objekt

 * @return String (line)

 */

String createCSV(Person person){

	String personstring;

	personstring=person.getVorname()+";"+person.getNachname()+";"+ person.getGeschlecht()+";"+person.getAlter();

return personstring;

	}


/**

 * Erzeugt aus der angegebnen Datei, die Personendaten im wie oben beschriebenen Format enthält

 * eine Liste von Personen-Objekten

 * @param fileName Datei

 * @return PersonList 

 */	

PersonList readPersons(String fileName){

	PersonList per = new PersonList();

		Reader fw = new FileReader(fileName);

	    Reader br =   new BufferedReader( fw );  

		PersonIO ikke = new PersonIO();

		per.add(ikke.createPerson(br.readLine()));

		return per;

	}

/**

 *  Schreibt alle Personen der übergebenen Personenliste in eine Datei mit dem angegebenen

 *  Dateinamen

 * @param fileName Name der Datei

 * @param persons Personen

 */	

void writePersons(String fileName, PersonList persons){


	}

Wär echt toll, wenn sich jemand das mal angucken könnte und mir vielleicht ein Beispiel von dem Writer bzw.Reader geben kann...

thx schonmal

Lg Kiki

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Kiki, also hier mal kurz ein Verwendungsbeispiel für einen BufferedReader:

1. Du erstellst einen File-Reader oder String-Reader oder woraus auch immer du lesen möchtest:

FileReader fileIn = new FileReader
2. Nun kommt der BufferedReader ins Spiel - dem übergeben wird unseren FileReader:
BufferedReader buff = new BufferedReader (fileIn);
Dem FileReader kannst du entweder den Dateinamen (mit Path) oder direkt die File übergeben, oder einen sog. FileDescriptor. 3. Und jetzt kommen wir zur Anwendung des BufferedReaders ... Nehmen wir mal an, du möchtest deine Datei zeilenweise auslesen - dann nimmst du die Methode "readLine()" des BufferedReader zur Hand. Du kannst solange Zeilen auslesen, bis dir der Methodenaufruf "null" (laut Java API) zurückliefert. Also das ganz mal in code-Form:


FileReader fileIn = new FileReader("/home/myDev/myFile.csv");

BufferedReader buff = new BufferedReader(fileIn);


//Speichert den BufferInhalt temporär

String tmp = "";


//Lies bis nix mehr da ist (Rückgabewert = null statt String)

while ( (tmp = buff.readLine() ) != null) {


//Mach irgendwas mit der eingelesenen Zeile (speichern, splitten o.ä.)


}


//Schließe den InputStream

buff.close();

fileIn.close();

Kanns grad nicht in ner IDE testen, also sollte es nicht funzen, sag nochmal Bescheid und ich korrigier's dann :).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

das sollte laufen allerdings bin ich mir nicht sicher ob du da nicht mit ner NullPointerException aus der Schleife fliegst...

Wenn du überprüfst ob der Buffer bereit ist bist du auf der sicheren Seite. (liefert false wenn die Datei oder was auch immer du einliest zuende ist)


[...]

//Lies bis nix mehr da ist 

while ( buff.ready()==true)

{

        tmp = buff.readLine() ;


//Mach irgendwas mit der eingelesenen Zeile (speichern, splitten o.ä.)


}

[...]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

das sollte laufen allerdings bin ich mir nicht sicher ob du da nicht mit ner NullPointerException aus der Schleife fliegst...

Wenn du überprüfst ob der Buffer bereit ist bist du auf der sicheren Seite. (liefert false wenn die Datei oder was auch immer du einliest zuende ist)


[...]

//Lies bis nix mehr da ist 

while ( buff.ready()==true)

{

        tmp = buff.readLine() ;


//Mach irgendwas mit der eingelesenen Zeile (speichern, splitten o.ä.)


}

[...]

Hi, so jetzt hab ichs mal ausprobiert - so wie ich es geschrieben habe funktioniert es und das ist auch eine der gängigen Methoden zu prüfen, ob man bei einer File am Ende angekommen ist (laut Java API) Ich hab auch deine Methode getestet und sie funktioniert ebenfalls. Laut Java-API scheint mir die Methode "readLine" aber sicherer, da sie genau für diesen Zweck geschaffen ist : In der Java-API wird folgendes zum Rückgabetyp der Methode readLine() gestagt: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached Und genau danach suchen wir ja - dem Ende des Streams :) . Hier nochmal das komplette Programm (getestet):

package forum;


import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;


public class ReadDokument {



	public static void main(String[] args) throws IOException

	{

		FileReader fileReader = new FileReader(new File("D:\\myFile.txt"));

		BufferedReader in = new BufferedReader(fileReader);


		String tmp = "";


		while ( (tmp = in.readLine() ) != null) {


			System.out.println(tmp);


		}


		//Schließe den InputStream

		in.close();

		fileReader.close();		

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...