Hi Leute,
ich bekomme immer eine NullPointerException wenn ich versuche eine TXT oder CSV-Datei einzulesen. Die Datei hat über 20000 Zeilen und ist etwa 1,2 Megabyte groß. An meinem FileLoader kann es eigentlich nicht leigen, denn starte ich das Programm aus Eclipse herraus wird die Datei (liegt dann aber nicht in einem JAR, sondern lokal auf der Festplatte) ohne Probleme geladen. Außerdem hab ich auch keine Probleme damit eine andere kleinere CSV (nur 4000 Zeilen ) aus dem JAR zu laden.
Hier der Code von meinem FileLoader
P.S.: Programm und TXT/CSV Datei liegen in einem JAR das ausgeführt wird.
P.P.S.: Ich lasse die JAR von der Export-Funktion von Eclipse erstellen.
ich bekomme immer eine NullPointerException wenn ich versuche eine TXT oder CSV-Datei einzulesen. Die Datei hat über 20000 Zeilen und ist etwa 1,2 Megabyte groß. An meinem FileLoader kann es eigentlich nicht leigen, denn starte ich das Programm aus Eclipse herraus wird die Datei (liegt dann aber nicht in einem JAR, sondern lokal auf der Festplatte) ohne Probleme geladen. Außerdem hab ich auch keine Probleme damit eine andere kleinere CSV (nur 4000 Zeilen ) aus dem JAR zu laden.
Hier der Code von meinem FileLoader
Code:
public FileLoader(String path, int columns,String trenner)
{
this.model = new DefaultTableModel(0,columns);
Vector v = new Vector();
File f = new File(path);
if(f.exists()) //Wenn die Datei existiert dann lies sie ein.
{
try
{
System.out.println("Datei: " + path +"wird lokal geladen von " +f.getAbsolutePath());
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
for (String buffer;(buffer = in.readLine()) != null;)
{
if("".equals(buffer.trim())) //Ändern da Nullpointer exception
//if ("".equals(buffer.trim()))
continue;
v = createVector( buffer,columns,trenner);
this.model.addRow(v);
}
in.close();
}
catch( IOException exc)
{
exc.printStackTrace();
}
}
else //Scheinbar konnte die Datei nicht vom lokalen Datenträger geladen werden
{ //- dann versuch aus ausführenden JAr zuladen
try
{
System.out.println("Datei wird auf dem ausführenden Jar geladen");
DataInputStream in = new DataInputStream(FileLoader.class.getResourceAsStream(path));
for (String buffer;(buffer = in.readLine()) != null;)
{
if (buffer.trim().equals(""))
continue;
v = createVector( buffer,columns,trenner);
this.model.addRow(v);
}
in.close();
}
catch( IOException exc)
{
exc.printStackTrace();
}
}
}
//Parameter size hat keine Bedeutung zur Zeit
protected Vector createVector(String buffer, int size, String trenner)
{
Vector vector = new Vector();
int counter = 0;
StringTokenizer str = new StringTokenizer(buffer,trenner,true);
for( int i = 0;str.hasMoreTokens(); i++ )
{ vector.add(str.nextToken());
//Sollte zweimal hintereinander ein Trennzeichen kommen,
//wird zwichen diese beiden ein Leerzeichen eingefügt
if(vector.elementAt(i).equals(trenner))
{
counter++;
if(counter >1)
{
vector.insertElementAt(" ",i);
counter = 0;
}
}
else
{
counter = 0;
}
}
/*
* Entfernt alle Trennezeichen aus dem Vector
*/
for(int i = 0; i< vector.size();i++)
{
if(vector.elementAt(i).equals(trenner))
{
vector.removeElementAt(i);
}
}
return vector;
}
P.S.: Programm und TXT/CSV Datei liegen in einem JAR das ausgeführt wird.
P.P.S.: Ich lasse die JAR von der Export-Funktion von Eclipse erstellen.