leerzeilen in txt

Status
Nicht offen für weitere Antworten.

Oni

Top Contributor
guten morgen,

habe wieder eine frage.
ich möchte aus eine txt daten auslesen, das klappt auch soweit.
Code:
while((line = in.readline()) != null)
{
 blabla
}

das problem ist jetzt wenn am ende der txt "enter" gedrückt worden ist, entsteht eine leerzeile und nach dem
speichern wird die txt nicht mehr gelesen.
kann ich irgendwie anders prüfen ob die txt durchlaufen worden ist ohne auf !=null zu prüfen?
 

Sky

Top Contributor
Oni hat gesagt.:
das problem ist jetzt wenn am ende der txt "enter" gedrückt worden ist, entsteht eine leerzeile und nach dem
speichern wird die txt nicht mehr gelesen.

Und was will uns der Autor damit sagen??

Kannst Du dein Problem mal'n bißchen besser beschreiben? Ich verstehe das Problem nicht...
 

Oni

Top Contributor
ich will damit sagen das in der txt leerzeilen gespeichert werden.

sprich:
in den ersten 5 zeilen der txt steht text.
dann drücke ich 3 mal enter und bin in zeile 8 der txt.
zeile 6 und 7 haben aber so keinen inhalt (sie sind leer).

wenn ich dann mit readLine != null prüfe ob da etwas steht läuft das natürlich nicht.
ist es jetzt klarer was ich meine?
 

Zilchinger

Mitglied
Hilft Dir das vielleicht weiter?

Code:
   public static void main(String[] args) {
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(new File("c:\\hallowelt.txt"));
            br = new BufferedReader(fr);
            while (br.ready()){
                System.out.println(br.readLine());
            }
            br.close();
            fr.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
 

Sky

Top Contributor
Oni hat gesagt.:
wenn ich dann mit readLine != null prüfe ob da etwas steht läuft das natürlich nicht.
ist es jetzt klarer was ich meine?
Naja, das liegt aber daran, dass Du eine andere Vorstellung hast, als JAVA! Du kannst einfach mit "readLine != null" nicht prüfen, ob in der Zeile etwas steht! In der API zu readline steht:
Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
Die Bedingung ist also erfüllt, sobald Du ENTER gedrückt hast.

Nun gibt es 2 Möglichkeiten:

a) Bei der ersten gefundenen Leerzeile wird abgebrochen:
Code:
while( ( line = br.readLine() ) != null && line.length() > 0 ) {
  //...
}

b) Leerzeilen werden in der Verarbeitung ignoriert:
Code:
while( ( line = br.readLine() ) != null ) {
  if ( line.length() > 0 ) {
    //...
  }
}
 

Oni

Top Contributor
ich lese anscheind zu wenig in der API *g* was aber auch an meinen schlechten englisch kenntnissen liegt.


egal jetzt klappt es :)

danke.
 

Sky

Top Contributor
Oni hat gesagt.:
ich lese anscheind zu wenig in der API *g* was aber auch an meinen schlechten englisch kenntnissen liegt.
Wenn Du mal auf http://www.java-forum.org/de/javabuch gehst und dann die Suche zu 'readline' bemühst, so bekommst Du: "Eine Textzeile wird dabei durch die Zeichen '\n' oder '\r' oder durch die Folge "\r\n" begrenzt. Der Rückgabewert von readLine ist ein String, der den Zeileninhalt ohne Begrenzungszeichen enthält bzw. null, falls das Ende des Streams erreicht ist."

Also, wenn Du mit Englisch nicht weiter kommst, dann versuch es auch mal dort.
 

Zilchinger

Mitglied
Hier mal mein Beispiel um Leerzeilen zu überspringen.
Man nimmt eigentlich lieber die Methode ready() um zu prüfen, ob man am Ende einer Datei angekommen ist.

Code:
  public static void main(String[] args) {
        FileReader fr = null;
        BufferedReader br = null;
        String aktLine;
        try {
            fr = new FileReader(new File("c:\\hallowelt.txt"));
            br = new BufferedReader(fr);
            while (br.ready()){
                aktLine = br.readLine();
                if (aktLine.trim().length() > 0)
                    System.out.println(aktLine);
            }
            br.close();
            fr.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
[/quote]
 

Sky

Top Contributor
Zilchinger hat gesagt.:
Man nimmt eigentlich lieber die Methode ready() um zu prüfen, ob man am Ende einer Datei angekommen ist.
Die Methode ready() prüft, ob von dem Stream gelesen werden kann. Dies Aussage ready == false heißt auch nicht, das nicht gelesen werden kann!
ready hat gesagt.:
Tell whether this stream is ready to be read. A buffered character stream is ready if the buffer is not empty, or if the underlying character stream is ready.

Overrides: ready in class Reader

Returns: True if the next read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block.

Throws: IOException - If an I/O error occurs


Hingegen readline == null heißt, das Ende des Streams ist erreicht:
readLine hat gesagt.:
...
Returns: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben