Kiki1988 Geschrieben 13. Januar 2008 Geschrieben 13. Januar 2008 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 Zitieren
Abd Sabour Geschrieben 17. Januar 2008 Geschrieben 17. Januar 2008 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 . Zitieren
der Loer Geschrieben 18. Januar 2008 Geschrieben 18. Januar 2008 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.ä.) } [...] Zitieren
Abd Sabour Geschrieben 18. Januar 2008 Geschrieben 18. Januar 2008 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(); } } Zitieren
Empfohlene Beiträge
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.