hallo zusammen,
bin neu in java.
ich hab mir aus dem java-codebook6 ein beispiel geschnappt zum einlesen von csv-dateien.
arbeiten tue ich mit dem eclipse-framework.
die datei erfordert 2 startparapeter, die ich bein programmaufruf mitgeben soll. in eclipse mache ich das ja mit RMT - Run AS - Run Configurations, dann auf Arguments.
Da geb ich dann den volständigen Pfad (c:\temp\adressen.csv) sowie das Trennzeichen mit an, --> also einfach , (Komma) ohne das Ding besonders zu maskieren mit " ", ' ' oder so.
Wie ist denn der korrekte Syntax, wenn ich ein Komma als Parameter mit übergeben will?
Ich krieg immer eine Fehlermeldung, und zwar:
Fehler beim Parsen der Datei in Zeile 2,
auch mal ne Null-Pointer-Exception (immer abhängig vom Trennzeichen).
Kann mir jemand auf die Sprünge helfen?
Hat das irgendwas mit dem Vector zu tun? bzw. mit dem charat(0) in Zeile 22?
Anbei (aus dem Buch deswegens machts eigentlich keinen Sinn, der ist ja richtig sollte man meinen) der Code:
Quelldatei:
[HIGHLIGHT="Java"]
Name,Vorname,Straße ,Stadt,PLZ,Telefon
Süß,Herbert,Weidenstraße 7,Bonn,53069,714568
Sauer,Florian,Erlenweg 54,Bonn,53968,400392
Bitter,Claudia,Eichennallee 26,Bonn,53092,660134
Salz,Maria,Tannenhain 4,Bonn,53968,403303
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
/**
*
* @author Dirk Louis
*/
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.Vector;
public class MoreIO {
// Instanzbildung unterbinden
private MoreIO() { }
/**
* Methode zum Einlesen und Parsen von CSV-Dateien
*/
public static Vector<String[]> readCSVFile(String filename, char delimiter)
throws IOException, ParseException {
Vector<String[]> lines = new Vector<String[]>();
String[] fields = null;
String line;
int countLines = 1;
int countFields = -1;
BufferedReader in = new BufferedReader(new FileReader(filename));
// Dateiinhalt zeilenweise lesen
while( (line = in.readLine()) != null) {
// Whitespace an Enden entfernen
line = line.trim();
// Leerzeilen übergehen
if (line.equals("") )
continue;
// Felder aus Zeilen extrahieren
fields = line.split(String.valueOf(delimiter));
// Wenn erste Zeile, dann Anzahl Felder abspeichern
if (countFields == -1)
countFields = fields.length;
// Sicherstellen, dass alle Zeilen die gleiche Anzahl Felder haben
if (countFields == fields.length) {
lines.add(fields);
++countLines;
} else
throw new ParseException("Ungleiche Anzahl Felder in "
+ "Zeilen der CSV-Datei", countLines);
}
// Stream schließen
in.close();
// Collection mit Feld-Arrays zurückliefern
return lines;
}
}
[/HIGHLIGHT]
sowie:
[HIGHLIGHT="Java"]
/**
* CSV-Dateien lesen
*
* @author Dirk Louis
*/
import java.util.Vector;
import java.io.IOException;
import java.text.ParseException;
public class Start_MoreIO {
public static void main(String args[]) {
if (args.length != 2) {
System.out.println(" Aufruf: Start <Dateiname> <Trennzeichen>");
System.exit(0);
}
System.out.println("\n Datei lesen und Zeile fuer Zeile ausgeben \n");
try {
Vector<String[]> lines = MoreIO.readCSVFile(args[0], args[1].charAt(0));
// Zeilen ausgeben
String[] line = null;
for (int l = 0; l < lines.size(); ++l) {
line = lines.get(l);
System.console().printf(" %d.Zeile:", l+1);
// Felder in Zeile ausgeben
for (int f = 0; f < line.length; ++f)
System.console().printf("\t%s", line[f]);
System.out.println();
}
} catch(IOException e) {
System.err.println("FEHLER beim Oeffnen der Datei");
} catch(ParseException e) {
System.err.println("FEHLER beim Parsen der Datei in Zeile "
+ e.getErrorOffset());
}
}
}
[/HIGHLIGHT]
bin neu in java.
ich hab mir aus dem java-codebook6 ein beispiel geschnappt zum einlesen von csv-dateien.
arbeiten tue ich mit dem eclipse-framework.
die datei erfordert 2 startparapeter, die ich bein programmaufruf mitgeben soll. in eclipse mache ich das ja mit RMT - Run AS - Run Configurations, dann auf Arguments.
Da geb ich dann den volständigen Pfad (c:\temp\adressen.csv) sowie das Trennzeichen mit an, --> also einfach , (Komma) ohne das Ding besonders zu maskieren mit " ", ' ' oder so.
Wie ist denn der korrekte Syntax, wenn ich ein Komma als Parameter mit übergeben will?
Ich krieg immer eine Fehlermeldung, und zwar:
Fehler beim Parsen der Datei in Zeile 2,
auch mal ne Null-Pointer-Exception (immer abhängig vom Trennzeichen).
Kann mir jemand auf die Sprünge helfen?
Hat das irgendwas mit dem Vector zu tun? bzw. mit dem charat(0) in Zeile 22?
Anbei (aus dem Buch deswegens machts eigentlich keinen Sinn, der ist ja richtig sollte man meinen) der Code:
Quelldatei:
[HIGHLIGHT="Java"]
Name,Vorname,Straße ,Stadt,PLZ,Telefon
Süß,Herbert,Weidenstraße 7,Bonn,53069,714568
Sauer,Florian,Erlenweg 54,Bonn,53968,400392
Bitter,Claudia,Eichennallee 26,Bonn,53092,660134
Salz,Maria,Tannenhain 4,Bonn,53968,403303
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
/**
*
* @author Dirk Louis
*/
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.Vector;
public class MoreIO {
// Instanzbildung unterbinden
private MoreIO() { }
/**
* Methode zum Einlesen und Parsen von CSV-Dateien
*/
public static Vector<String[]> readCSVFile(String filename, char delimiter)
throws IOException, ParseException {
Vector<String[]> lines = new Vector<String[]>();
String[] fields = null;
String line;
int countLines = 1;
int countFields = -1;
BufferedReader in = new BufferedReader(new FileReader(filename));
// Dateiinhalt zeilenweise lesen
while( (line = in.readLine()) != null) {
// Whitespace an Enden entfernen
line = line.trim();
// Leerzeilen übergehen
if (line.equals("") )
continue;
// Felder aus Zeilen extrahieren
fields = line.split(String.valueOf(delimiter));
// Wenn erste Zeile, dann Anzahl Felder abspeichern
if (countFields == -1)
countFields = fields.length;
// Sicherstellen, dass alle Zeilen die gleiche Anzahl Felder haben
if (countFields == fields.length) {
lines.add(fields);
++countLines;
} else
throw new ParseException("Ungleiche Anzahl Felder in "
+ "Zeilen der CSV-Datei", countLines);
}
// Stream schließen
in.close();
// Collection mit Feld-Arrays zurückliefern
return lines;
}
}
[/HIGHLIGHT]
sowie:
[HIGHLIGHT="Java"]
/**
* CSV-Dateien lesen
*
* @author Dirk Louis
*/
import java.util.Vector;
import java.io.IOException;
import java.text.ParseException;
public class Start_MoreIO {
public static void main(String args[]) {
if (args.length != 2) {
System.out.println(" Aufruf: Start <Dateiname> <Trennzeichen>");
System.exit(0);
}
System.out.println("\n Datei lesen und Zeile fuer Zeile ausgeben \n");
try {
Vector<String[]> lines = MoreIO.readCSVFile(args[0], args[1].charAt(0));
// Zeilen ausgeben
String[] line = null;
for (int l = 0; l < lines.size(); ++l) {
line = lines.get(l);
System.console().printf(" %d.Zeile:", l+1);
// Felder in Zeile ausgeben
for (int f = 0; f < line.length; ++f)
System.console().printf("\t%s", line[f]);
System.out.println();
}
} catch(IOException e) {
System.err.println("FEHLER beim Oeffnen der Datei");
} catch(ParseException e) {
System.err.println("FEHLER beim Parsen der Datei in Zeile "
+ e.getErrorOffset());
}
}
}
[/HIGHLIGHT]