2013-07-25 123 views
14

从文本文件中提取特定行数的最有效方法是什么?例如,如果我使用扫描仪来解析文件,我首先必须创建一个长度与文本文件中的行数相匹配的数组吗?从Java文本文件中读取特定行

如果一个文本文件有30行,我只想使用第3,8和12行,是否有专门的方法来只读这些行?

+7

如果你不能确定均匀性中的每一行的长度,然后循环使用计数器可能! – NINCOMPOOP

+0

http://stackoverflow.com/questions/2312756/in-java-how-to-read-from-a-file-a-specific-line-given-the-line-number –

+1

太棒了。谢谢大家。我想我会使用计数器变量。说得通。 – Jon

回答

7

这里是你如何做到这一点:

import java.io.*; 

public class Test { 
public static void main(String [] args) { 

    // The name of the file to open. 
    String fileName = "temp.txt"; 
    int counter = 0; 

    // This will reference one line at a time 
    String line = null; 
    FileReader fileReader = null; 

    try { 
     // FileReader reads text files in the default encoding. 
     fileReader = 
      new FileReader(fileName); 

     // Always wrap FileReader in BufferedReader. 
     BufferedReader bufferedReader = 
      new BufferedReader(fileReader); 

     while((line = bufferedReader.readLine()) != null) { 
      counter++; 
      if(counter == 3 || counter == 8 || counter == 12) 
      { 
       // do your code 
      } 
     } 

    } 
    catch(FileNotFoundException ex) { 
     System.out.println(
      "Unable to open file '" + 
      fileName + "'");     
    } 
    catch(IOException ex) { 
     System.out.println(
      "Error reading file '" 
      + fileName + "'");     
     // Or we could just do this: 
     // ex.printStackTrace(); 
    } 
    finally 
    { 
     if(fileReader != null){ 
      // Always close files. 
      bufferedReader.close();    
     } 
    } 
} 
} 
+1

你应该在'finally'块中关闭你的流,以确保一个例外不会让他们打开 – MadProgrammer

+0

+1只是为了打我吧 – MaVRoSCy

+0

@MadProgrammer是真的,解决了这个问题。谢谢 –

4

这里是你可以做什么。 (这是你的计划中的一部分,不完全是你的程序)

int counter 0 =; 
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line = br.readLine()) != null) { 
    // process the line. 
    counter++; 

    switch(counter){ 
    case 3: 
     \\ do your code for line no 3 
     break; 
    case 8: 
     \\ do your code for line no 8 
     break; 
    case 12: 
     \\ do your code for line no 12 
     break; 
    } 
}  
br.close(); 
3

试试这个

try 
    { 
     String sCurrentLine; 
     br = new BufferedReader(new FileReader("File_Path")); 
     int counter = 0; 
     while ((sCurrentLine = br.readLine()) != null) 
     { 
      counter++; 
      if (counter == 3 || counter == 8 || counter == 12) 
      { 
       System.out.println("" + br.read()); 
       if (counter == 12) 
        break; 
      } 
     } 
    } 
    catch (IOException e) 
    { 
     System.out.println("Exception " + e); 

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

关于最后一个问题:按照这个answer,爪哇8能够提取从一个特定的行文件。答案中提供了示例。