2013-07-25 18 views
14

Was ist der effizienteste Weg, um bestimmte Zeilennummern von Daten aus einer Textdatei zu extrahieren? Wenn ich beispielsweise den Scanner zum Parsen einer Datei verwende, muss ich zuerst ein Array mit einer Länge erstellen, die der Gesamtzahl der Zeilen in der Textdatei entspricht?Eine bestimmte Zeile aus einer Textdatei in Java lesen

Wenn eine Textdatei 30 Zeilen hat und ich nur mit den Zeilen 3, 8 und 12 arbeiten möchte, gibt es eine Möglichkeit, nur diese Zeilen zu lesen?

+7

Wenn Sie über die Gleichmäßigkeit der Länge jeder Zeile nicht sicher, dann mit Schleife einen Zähler wahrscheinlich! – NINCOMPOOP

+0

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

+1

Ehrfürchtig. Danke an alle. Ich schätze, ich werde die Zählervariable verwenden. Macht Sinn. – Jon

Antwort

7

hier ist, wie Sie es tun:

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

Sie sollten Ihre Streams in der 'endlich'-Block schließen, um sicherzustellen, dass eine Ausnahme sie nicht offen hält – MadProgrammer

+0

+1 für nur mich zu schlagen – MaVRoSCy

+0

@ MadProgrammer wahr, das behoben. danke –

4

hier ist das, was Sie tun können. (Es nur ein Teil des Programms ist, nicht genau Ihr Programm)

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

Versuchen Sie, diese

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

In Bezug auf die letzte Frage: Nach diesem answer, Java 8 können Sie bestimmte Zeilen aus einem extrahieren Datei. Beispiele sind in dieser Antwort angegeben.

Verwandte Themen