ich habe folgendes Problem. Ich moechte ein .csv file einlesen und jetzt erst mal testweise auf der konsole ausgeben. Dieses Testfile hat 10 Datensaetze mit Stings und int - Werte und ist Semikolon getrennt.
Leider werden ein Teil der Zeilen "verschluckt" und ich versteh nicht wieso????
Hier mal mein Code...
Code:
private void readIn()
{
try
{
BufferedReader in = new BufferedReader(new FileReader(this.file));
try
{
while (in.readLine() != null)
{
buf.append(in.readLine()).append('\n');
System.out.println(in.readLine());
}
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Weil du mit in.readLine() auf die nächste Zeile springst und du das sowohl in der Schleifenbedingung als auch für deine Ausgabe verwendest. Versuche mal:
[HIGHLIGHT="Java"]private void readIn(){
try {
BufferedReader in = new BufferedReader(new FileReader(this.file));
StringBuffer buf = new StringBuffer();
String out;
while ((out = in.readLine()) != null) {
buf.append(out + "\n");
System.out.println(out);
}
System.out.println(buf.toString());
} catch (IOException e) {
e.printStackTrace();
} catch(FileNotFoundException e) {
e.printStackTrace();
}
}[/HIGHLIGHT]
Ansonsten würde ich für sowas, wenn du es nicht ausschließlich aus Übungszwecken machst, eher auf ein schon etabliertes Framework, wie z.B. opencsv setzen.
Edit: hoffe der code ist so komplett richtig, habs eben hier ungetestet im Browser geschrieben.
=
lies erste Zeile ein, wenn != null dann lies zweite Zeile ein und verarbeite diese ungeprüft, gib dritte Zeile (ungeprüft) aus
lies vierte Zeile ein, wenn != null dann lies fünfte Zeile ein und verarbeite diese ungeprüft, gib sechst Zeile (ungeprüft) aus
..
--------
besser:
String line = null;
> while ((line = in.readLine()) != null)
> {
> buf.append(line).append('\n');
> System.out.println(line);
=
lies erste Zeile ein, wenn != null dann verarbeite diese ungeprüft und gib diese aus
lies zweite Zeile ein, wenn != null dann verarbeite diese ungeprüft und gib diese aus
..
@habi55:
> buf.append(out +"\n");
kein allzu guter Vorschlag, da wird unnötig ein langer String produziert,
in einer solchen Schleife sind zwei append nicht falsch
@Wildcard
Danke für den Tipp.
Sollte man beim StringBuffer dann tatsächlich vermeiden mit Strings als parameter zusammenzusetzen und immer mit .append arbeiten?
mit Wildcard verwechselt zu werden ist ja eine Ehre
ohne + wird StringBuffer/ StringBuilder immer am schnellsten sein,
meist ist bisschen langsamer aber nicht schlimm, und wenn man 5 Strings zusammensetzt wären die vielen appends() schon deutlich störender, während 5x + in einer Zeile kaum schlechter ist als ein +
je weniger + und je mehr die Schleife danach aussieht, was großes zu leisten wie eine ganze Datei einzulesen, desto eher lohnt es sich, auch auf das letzte + noch zu verzichten
freilich kann man dabei kaum eine spürbare Zeit verbrauchen, bevor nicht der StringBuffer-Inhalt selber den Arbeitsspeicher sprengt