2010-02-18 10 views
11

mi sto leggendo ogni riga del file nel modo di seguitoCome rilevare la prima e l'ultima riga durante reader.readLine()?

BufferedReader in = new BufferedReader(new FileReader(inFile)); 

while (null != (line = in.readLine())) { 


} 

voglio fare un po 'di validazione nella prima riga e ultima riga da solo. C'è un modo per verificare se si tratta di una prima linea e ultima riga all'interno del ciclo while

while (null != (line = in.readLine())) {  

    if(firstlineoffile) { 
    } 

    else if (lastlineoffile) { 
    } 

    else 
    { 
    } 

} 
+0

Rientro il codice da 4 spazi per formattare come tale. L'ho risolto per te in questo post. –

risposta

11

Freddo domanda. Ho giocato un po 'intorno ad esso e qui c'è un SSCCE, basta copiare e non rovinare.

package com.stackoverflow.q2292917; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.PrintWriter; 

public class Test { 

    public static void main(String... args) throws IOException { 
     // Create test file. 
     File file = new File("/test.txt"); 
     PrintWriter writer = new PrintWriter(file); 
     writer.println("line 1"); 
     writer.println("line 2"); 
     writer.println("line 3"); 
     writer.println("line 4"); 
     writer.println("line 5"); 
     writer.close(); 

     // Read test file. 
     BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(new FileReader(file)); 
      String next, line = reader.readLine(); 
      for (boolean first = true, last = (line == null); !last; first = false, line = next) { 
       last = ((next = reader.readLine()) == null); 

       if (first) { 
        System.out.println("first line: " + line); 
       } else if (last) { 
        System.out.println("last line: " + line); 
       } else { 
        System.out.println("normal line: " + line); 
       } 
      } 
     } finally { 
      if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
     } 

     // Delete test file. 
     file.delete(); 
    } 

} 

uscita:

 
first line: line 1 
normal line: line 2 
normal line: line 3 
normal line: line 4 
last line: line 5 

Io però in discussione la leggibilità e interpretabilità da antipasti ... ;)

+0

Grazie mille! Ho provato il programma di esempio e funziona – Arav

+0

Prego. – BalusC

0

se si aggiunge un conteggio, e riorganizzare il codice un po ', questo dovrebbe funzionare (non ho ancora testato questo modo ci possono essere errros sintassi):

int count = 0; 
String line = in.readLine(); 
while (line!=null) { 
    String currLine = line; 
    if(count==0){ 
    //currLine is the first line 
    } 

    line = in.readLine(); 
    if(line==null){ 
    //currLine is the last line 
    } 

    if(count>0 && line!=null){ 
    //do something with lines in between 
    System.out.println(currLine); 
    } 
    count++; 
} 
+1

Bene, se riga == null hai superato l'ultima riga. Dovresti sempre guardare avanti e se nextLine == null sei all'ultimo. – Kylar

+1

Oppure puoi rifattorizzarlo in un ciclo do-while, che eliminerà 'readLine()' fuori dal ciclo. Inoltre, se riga == null, la riga _previous_ era l'ultima riga, non quella corrente. –

+0

refactored un po 'per identificare correttamente l'ultima riga – Upgradingdave

0
String currentLine = in.readLine(); 
String nextLine = in.readLine(); 
boolean hasStarted = false; 
while(null != currentLine){ 
    if(!hasStarted){ 
     //first line. 
     hasStarted = true; 
    } 
    //all your processing here. 
    if(null == nextLine){ 
     //last line, cause there's nothing else coming up 
    } 
    currentLine = nextLine; 
    nextLine = in.readLine(); 
} 
-1

qualcuno potrebbe ben trovare una soluzione più elegante di questo, ma qui andiamo:

boolean isFirstLine = true; 
do{ 
     String line = in.readLine(); 
     if(isFirstLine){ 
     //this is the first line 
     isFirstLine = false; 
     } 
     else if(line==null){ //previous line was the last line 
     in.reset(); 
     line = in.readLine(); 
     //do last line specific stuff 
     break; 
     } 
     else { 
      //do stuff for lines in between 
     } 
     in.mark(100); 

}while (line!=null); 

Non ho provato questo, quindi ci potrebbero essere errori minori. Non ho risolto la gestione delle eccezioni in questo codice. readLine(), mark() e reset() tiro IOException e mark() possono anche buttare IllegalArgumentException

0
public class Vomitfirstline { 

    public static void main(String[] args) { 

     BufferedReader br = null; 

     try { 

      String sCurrentLine; 

      br = new BufferedReader(new FileReader("Path")); 
      br.readLine(); 

      { 


       while ((sCurrentLine = br.readLine()) != null) 
     System.out.println(sCurrentLine); 

      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (br != null)br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
+0

puoi controllare il codice sopra – Vijay

Problemi correlati