2017-08-24 91 views
0

我想从文件夹中读取所有日志文件。我现在正在阅读一个文件。我已将日志文件的路径设置为String dir。并且我列出了其他例外情况,这些例外情况与getExternalServiceException差不多。我如何使用for loopfor each loopD:\\logs读取所有日志文件。从文件夹中读取所有日志文件

警报 - 我需要使用Java V1.6

public class CallingCheck 
{ 


    public void getExternalServiceException(String sPath) { 
     BufferedReader br = null; 
     try { 
      File f = new File(sPath); 
      if(f.isFile()) 
      { 

      FileInputStream fis = new FileInputStream(sPath); 
      DataInputStream dis = new DataInputStream(fis); 
      br = new BufferedReader(new InputStreamReader(dis)); 
      String strLine; 

      String sPattern = "at (.*)\\.(.*)\\(([^:]*):?([\\d]*)\\)"; 

      Pattern p = Pattern.compile(sPattern); 

      boolean bFlag = false; 
      int iCount = 0; 
      int totCount = 0; 
      int exCount = 0; 


      while ((strLine = br.readLine()) != null) { 

       if((strLine.contains("com.shop.integration.exception.ExternalServiceException"))) 
         // 
       { exCount++; 
        bFlag = true; 

       } 
       if(bFlag){ 

        if((strLine.contains("** Error"))){ 


        Matcher m = p.matcher(strLine); 
        if(m.find()){ 
         totCount++; 
         iCount++; 

        if(iCount==1){ 
         System.out.println("Class name:- " + m.group(3)); 
         System.out.println("Line Number:- " + m.group(4)); 
         System.out.println("ExternalServiceException occurence count: " + exCount); 

         System.out.println("ExternalServiceException stack trace count: " + totCount); 

        } 
        if(strLine.contains("at")){ 
         String sTemp[] = strLine.split("\\s+at+\\s+"); 

         strLine = sTemp[1]; 
         strLine = "at "+strLine; 
        } 
        System.out.println(strLine); 


        if(iCount == 5){ 
         bFlag = false; 
         iCount=0; 
        } 

        } 
       } 

      } 
      }}} 
     catch (Exception e) { 
      System.out.println(e.getMessage()); 
     }finally{ 
      try{ 
      if(br != null){ 
       br.close(); 
      } 
      }catch(Exception e){ 
       System.out.println(e.getMessage()); 
      } 
     } 
    } 

    public static void main(String[] args) 
    { 
     String dir= "D:\\logs\\readLogFiles.txt"; 

     CallingCheck check = new CallingCheck(); 
     check.getExternalServiceException(dir); 


    } 


} 

回答

1

您可以使用File.listFiles

File[] fileList = new File(directory).listFiles(new FilenameFilter() { 
      @Override 
      public boolean accept(File dir, String name) { 
       return true; // we simply want all the files in this directory 
          // but you can edit to accept specific files 
          // only depending on certain conditions 
      } 
     }); 

for (File file : fileList) { 
    // handle each file - read/write etc 
} 

使用Lambda(Java 8)是更酷:

File[] fileList = new File(directory).listFiles((dir, name) -> { 
    return true; // we simply want all the files in this directory 
}); 
0

此代码应该诀窍:

public static void main(String[] args) 
{ 
    File inputFolder = new File("your_directory_here"); 
    for(File inputFile : inputFolder.listFiles()) 
    { 
     // ignore files that aren't log files 
     if(!f.getName().endsWith("log")) 
      continue; 

     // call a separate method to deal with each file 
     processFile(inputFile); 
    } 
} 

private static void processFile(File logFile) 
{ 
    // enter your logic here 
} 
0

您可以使用下面的代码来获得一个文件夹中的所有文件

File folder = new File("/Users/you/folder/"); 
File[] listOfFiles = folder.listFiles(); 

for (File file : listOfFiles) { 
if (file.isFile()) { 
    System.out.println(file.getName()); 
} 
} 
+0

这会给我的文件夹中的文件列表。我也想阅读所有这些文件。如果我使用路径作为'File'对象,我如何通过'main'方法中的'dir'路径。 –