2015-03-31 45 views
0

嗨我想添加一個功能,我也可以跟蹤找到的字符串的行號。不知道在下面的代碼中如何以及如何實現它。請記住我正在查看的文件大小爲50MB。在目錄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

當您在閱讀時循環瀏覽文件的每一行時搜索文本。記錄找到字符串的行號。例如:

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 
} 

取決於上下文,你也不妨通過改變搜索字符串,每行一個特定的情況下(大/小寫)做一個區分大小寫的搜索。