2010-02-18 23 views
11

aşağıda şekilde ilk satırı ve yalnız son satırında bazı doğrulama yapmak istiyorumreader.readLine() sırasında ilk ve son satır nasıl algılanır?

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

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


} 

dosyanın her satır okuyorum. Eğer bir sayımını ekleyin ve kod, bu çalışması gerekir biraz yeniden düzenlemek eğer ben bu yüzden bu test etmedim (while döngüsünün

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

    if(firstlineoffile) { 
    } 

    else if (lastlineoffile) { 
    } 

    else 
    { 
    } 

} 
+0

girinti. Bu yazıda senin için tamir ettim. –

cevap

11

Serin soru atabilir. Biraz oynamıştım ve işte bu bir kopyayı SSCCE, sadece copy'n'paste'n'run.

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(); 
    } 

} 

Çıktı: 4 boşluklarla kodunuzu gibi biçimlendirmek için

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

Ben ancak başlayanlar tarafından okunabilirliği ve yorumlanabilirliğini sorgulamak ... ;)

+0

Çok teşekkürler! Örnek programı denedim ve – Arav

+0

çalışıyor. – BalusC

0

içinde ilk satırı ve son satır olmadığını kontrol etmek herhangi yolu var mı

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

Eh, line == null Eğer son satırı geçersiniz. Her zaman ileriye bakmak zorunda kalacaksınız ve nextLine == null ise sonuncu sizsiniz. – Kylar

+1

Veya bunu, döngü dışında 'readLine() 'den çıkaracak olan bir do-while döngüsüne yeniden yerleştirebilirsiniz. Ayrıca, eğer satır == null ise, _previous_ satır son satırdı, geçerli olan değil. –

+0

, son satırı doğru şekilde tanımlamak için bir süreyi yeniden oluşturdu – 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

Birisi de bundan daha daha zarif bir çözüm gelebilir, ama burada biz gitmek: orada) sözdizimi errros olabilir

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); 

Bunu test etmedim, bu nedenle küçük hatalar olabilir. Bu kodda istisna işlemlerini sıralamadım. readLine(), mark() ve reset() atmak IOException ve mark() da 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

Yukarıdaki kodu kontrol edebilir misiniz – Vijay

İlgili konular