2013-07-25 4 views
14

Каков наиболее эффективный способ извлечения определенных номеров строк из текстового файла? Например, если я использую Scanner для анализа файла, мне сначала нужно создать массив с длиной, соответствующей общему количеству строк в текстовом файле?Чтение определенной строки из текстового файла в 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

Awesome. Спасибо всем. Думаю, я буду использовать переменную счетчика. Имеет смысл. – 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 true, исправлено это. спасибо –

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, Java 8 позволяет извлечь определенные строки из файл. В этом ответе приводятся примеры.

Смежные вопросы