2d Arrays: Einlesen von CSV NullPointerException

wuaschtikus

Grünschnabel
Hallo Leute,

Ich habe folgendes Problem. Ich programmiere gerade ein kleines JavaProg welches CSV Daten in das Programm einliest. Dabei handelt es sich um mehrere Datensätze mit zb. 228 Spalten. Ich habe bis jetzt folgenden Code programmiert.

Code:
while ((strLine = reader.readLine()) != null) {
                items = strLine.split("\\;");

                for(int col=0; col <=items.length; col++){
                    stringArray[row][col] =items[col]; //<---------------------------
                }
                row++;

            }

Leider bekomme ich die ganze Zeit nur NullPointer Exceptions - genau in der Zeile wo ich den Pfeil hingemacht habe. Hat vielleicht jemand eine Idee? Ich habe schon viel gegoogelt - jedoch hat mich nichts auf einen richtigen Ansatz gebracht bzw. hab ich keine Ahung wo der Fehler liegen könnte. Hat vielleicht jemand eine Idee?

Vielleicht noch wichtig zu wissen - die Spaltenanzahl kann sich abwechseln und ist nur im maximal Bereich 228 Spalten lang. Manche haben vielleicht nur 200 und der nächste 220.

Bin Glücklick über jeden neuen Ansatz ;)

lg Martin
 
Wenn du beim Pfeil eine NullPointerEx. bekommst, wirst du wohl stringArray nicht angelegt haben...ohne mehr Code kann ich auch nicht sagen, wo der Fehler liegt.
 
Hallo,

eigentlich lässt sich das Problem sehr leicht selbst lösen.
Die Exception sagt ja aus, dass etwas in dieser Zeile null ist. Also in diesem Fall eine dieser zwei Variablen.
Also schaut man einfach mal, ob beide Objekte initialisiert sind. Hier sieht man, dass items initialisiert ist, da es schon mal verwendet wird, ohne Fehler.
Also kann es nur noch an stringArray liegen.

Eine weitere Möglichkeit wäre, man setzt einen Breakpoint in dieser Zeile. Startet den Debugger und schaut sich alle Variablen an, die sich in dieser Zeile befinden.

Gruß

Sascha
 
Hier nochmal mit mehr Code. stringArray ist ansich oben definiert. Es sei denn es fehlt mir hier noch etwas. Das array "items" kann ich auch ganz normal ausgeben in der schleife - dieses array funktioniert einwandfrei - also muss der Fehler beim StringArray liegen da hast du vielleicht Recht. Trotzdem scheitn für mich alles in Ordnung - leider bin ich es gewöhnt mit AL zu arbeiten und kenn mich bei den "normalen" arrays nicht so gut aus.

Code:
    File datei = null;
    FileReader ein = null;
    BufferedInputStream eingabe = null;
    BufferedReader reader = null;
    String[] items;
    ArrayList list = new ArrayList<String>();
    String[][] stringArray;

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        JFileChooser dateiAuswahl = new  JFileChooser();
        int status = dateiAuswahl.showOpenDialog(this);

        if(status == JFileChooser.APPROVE_OPTION){
            datei = dateiAuswahl.getSelectedFile();
        }
        try {
            ein = new FileReader(datei);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
        }

        reader = new BufferedReader(ein);

        String strLine;
        
        int row=0;
        try {
            while ((strLine = reader.readLine()) != null) {
                items = strLine.split("\\;");
                for(int col=0; col<=items.length-1; col++){
                    System.out.println(items[col]);
                    stringArray[row][col] =items[col];
                }
                System.out.println("+++++++++++++++++++++");
                row++;
            }
        } catch (IOException ex) {
            Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Fehler beim einlesen!");
        }
 
Wie auch schon von sheel vermutet wurde, ist dein stringArray null.

Du legst zwar eine Variable an, aber initialisierst diese nicht.
Code:
String[][] stringArray = new String[AnzahlFelder][AnzahlFelder]

Also du musst mit new noch ein neues Array erzeugen.
Du musst aber wissen, wie groß dein Array werden muss. Zumindest musst du eine Größe wissen.
Code:
String[][] stringArray;
stringArray = new String[AnzahlFelder];

Dann könntest du später das so lösen.
Code:
stringArray[row] = items;

Wenn du die Zeilenanzahl vorher nicht weißt, dann solltest du das ganze mit einer Liste lösen.
Diese könntest du dann später zu einem Array machen.

Gruß

Sascha
 
Omg ich danke dir. Ich habe nicht damit gerechnet dass man hier die Anzahl der Felder angeben MUSS.

Danke vielmals aus dem derzeit schneeverwehten Wien ;)
 
Zurück