2015-03-31 2 views
0

Привет Я пытаюсь добавить функциональность, где я также могу отслеживать номер строки найденной строки. Не знаете, где и как реализовать это в следующем коде. Имейте в виду, что файлы, которые я просматриваю, имеют размер 50 МБ.Поиск строки в списке текстовых файлов в каталоге Java .. хочу найти номер строки.

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


public class scanFiles { 
    private static void scanFiles(String folderPath, String searchString) throws FileNotFoundException, IOException { 
     File folder = new File(folderPath); 

     if (folder.isDirectory()) { 
      for (File file : folder.listFiles()) { 
       if (!file.isDirectory()) { 
        BufferedReader br = new BufferedReader(new FileReader(file)); 
        String content = ""; 
        try { 
         StringBuilder sb = new StringBuilder(); 
         String line = br.readLine(); 

         while (line != null) { 
          sb.append(line); 
          sb.append(System.lineSeparator()); 
          line = br.readLine(); 
         } 
         content = sb.toString(); 


        } finally { 
         br.close(); 
        } 
        if (content.contains(searchString)) { 
         System.out.println("File " + file.getName() + " contains searchString " + searchString + "!"); 
        } 

       } 
      } 
     } else { 
      System.out.println("Not a Directory!"); 
     } 
    } 
    public static void main(String args[]) throws FileNotFoundException, IOException{ 
     scanFiles(new File("C://Users//FarmaniA//Documents//COB NAK Messages").getAbsolutePath(),"15:09:07,803"); 

} 
} 

ответ

2

Поиск текста при прокручивании каждой строки файла во время чтения. Сохраните запись номеров строк, где найден String. Например:

List<Integer> lineNumbers = new ArrayList<Integer>(); 
int lineNumber = 0; 
while (line != null){ 
    lineNumber++; 
    if (line.indexOf(searchString) != -1){ 
     lineNumbers.add(lineNumber); 
    } 
    line = br.readLine(); 
} 
if (lineNumbers.size() > 0){ 
    //do something with them 
} 

В зависимости от контекста, вы можете также сделать поиск без учета регистра, изменив строку поиска и каждую строку к конкретному случаю (прописной/нижний регистр).

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