1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[Java] explizit eine Zeile auslesen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Wikinator, 11.12.05.

  1. Wikinator

    Wikinator Adams Parmäne

    Dabei seit:
    21.08.04
    Beiträge:
    1.297
    Hallo,

    ich finde hierbei einfach den Fehler nicht:
    Ich habe ein File was ich mit dem BufferedReader auslese. Damit ich nicht endlos viele unnötige Variablen erstellen muss, mache ich das mit dieser Methode:
    Code:
    for (int i = number; i != 0 && line != null; i--) 
    [INDENT]line = in.readLine();[/INDENT] 
    return line;
    das funktioniert auch gut, mit Zeile 1, 2, 3 und 4. Aber wenn ich so aufrufe:
    Code:
     stringh = getLine(4, in);
                height = Double.parseDouble( stringh );
    
                stringw = getLine(5, in);
                width = Double.parseDouble(stringw);
    
                stringx = getLine(6, in);
                x = Double.parseDouble(stringx);
    
                stringy = getLine(7, in);
                y = Double.parseDouble(stringy);
    das wirft immer eine "Java.lang.NullPointerException", obwohl die Datei aus mehr als 4 Zeile besteht.
    Wenn ich eine andere kleine Testklasse dazuschreibe, die einfach nur aus einem Testfile Zeile 12 ausgibt, funktioniert die Methode perfekt. Was mache ich falsch?
     
  2. Hausmeister76

    Hausmeister76 Adams Parmäne

    Dabei seit:
    17.08.04
    Beiträge:
    1.300
    hi...

    deine for-Schleife funktioniert nur bis Zeile 4? schreib doch mal bitte noch eine Ausgabe auf die Konsole in die for-Schleife für das i, number und das line..... und eventuell alles drei nochmal vor die for Schleife. Eventuell liegts an den Variablen...

    so long...
     
  3. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Du übergibst deiner getLine-Methode ja neben der gewünschten Zeile auch noch den BufferedReader. Wenn du diesen nicht außerhalb immer neu erstellst, wird dein getLine nicht richtig funktionieren, da der BufferedReader intern einen Pointer verwaltet, wo er gerade in der Datei ist.

    Schreibst du also im Code:
    getLine(2, in);
    getLine(3, in);

    wird der zweite Aufruf die 5. Zeile der Datei liefern. Der BufferedReader springt ja nicht zurück an den Anfang der Datei. Beim ersten Aufruf funktioniert also getLine. Bei nachfolgenden musst du den BufferedReader neu erzeugen und damit wieder auf den Anfang der Datei verweisen lassen.
     
    Wikinator gefällt das.
  4. Wikinator

    Wikinator Adams Parmäne

    Dabei seit:
    21.08.04
    Beiträge:
    1.297
    hm, ich dachte Pointer gibt es nur in C und C++, aber nicht in Java o_O

    Aber gut, wenn ich den BufferedReader vor jedem Aufruf neu erstelle geht es. Danke!
     
  5. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Einfacher und performanter wäre es, du würdest den Summs auf einen Schwung einlesen und danach auswerten.

    Und es ist kein Pointer im C Sinne, sondern einfach nur eine Art Lesemarke ;)

    Gruß,

    .commander
     
  6. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Ausserdem kennt der BufferedReader die Methode reset() - die die Lesemarke auf Position 0 setzt.

    Gruß,

    .commander
     
  7. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    reset() spring an die Stelle, die zuletzt mit mark() markiert wurde. Das muss nicht unbedingt der Dateianfang sein.

    Egal, das wichtige ist, dass Wikinator den Fehler in seiner Methode gesehen hat und die Funktionsweise des BufferedReader damit wohl besser versteht. Wie er diese Semantik nun syntaktisch umsetzt ist eher zweitrangig.
     
  8. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Stömmt. mark() hab ich noch nie verwendet, ehrlich gesagt. Danke für den Hinweis!

    Gruß,

    .commander
     
  9. Wikinator

    Wikinator Adams Parmäne

    Dabei seit:
    21.08.04
    Beiträge:
    1.297
    auch von mir danke an alle für's erklären. :)
     

Diese Seite empfehlen