2013-04-01 109 views
1

我有一個包含用戶名和電話號碼的目錄中的文本文件列表。每當用戶更改電話號碼時,它將保存在同一目錄中的新文件中。現在我搜索 用戶的條目存在於多個文件中。如何找到上次修改文件的名稱..?下面的 是我目前想到的代碼片段。如何從文件列表中獲取最後一個修改後的文件

public static String queryFile() throws IOException{ 

    File directory = new File("E:\\idm\\users\\output"); 
    Boolean isUserPresent = false; 
    String queryUser = "Mar25-user6"; 
    ArrayList arr = new ArrayList(); 

    if(directory.isDirectory()) 
    { 
     File[] fileNames = directory.listFiles(); 
     for(int i=0;i<fileNames.length;i++) 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileNames[i]))); 
      while((line = reader.readLine()) != null) 
      { 
      if(line.contains(queryUser)) 
      { 
       arr.add(fileNames[i]); 

      } 
      } 

     } 

     /* 
     how to check the last modified file from among files present in Arraylist arr. 
     */ 

     if (arr.isEmpty) 
     { 
     isUserPresent = false; 
     return ""; 
     } 
     else 
     { 
     isUserPresent = true; 
     // return name of file if user present 
     } 
    } 
} 

通過javadoc中,我發現File.lastModified()比較這個函數的唯一選擇返回的值function.Is去..?

回答

0

我會做這樣的

File lastModified = null; 
    for (File file : directory.listFiles()) { 
     if (file.isFile()) { 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(new FileInputStream(file))); 
      try { 
       for (String line; (line = reader.readLine()) != null;) { 
        if (line.contains(queryUser)) { 
         arr.add(file); 
         if (lastModified == null 
           || file.lastModified() > lastModified 
             .lastModified()) { 
          lastModified = file; 
         } 
        } 
       } 
      } finally { 
       reader.close(); 
      } 
     } 
    } 
0

使用file.lastModified()用於獲取修改爲每個文件的最後日期,然後相互

0

Java的比較沒有現成的API進行這項工作,但它可以很容易地通過使用把一些邏輯周圍日期實施方法或者也可以使用Apache FileUtils。我會推薦使用Apache Utils。

我會去是這樣的:

  1. 聲明包含數據文件符合您查詢
  2. 迭代通過目錄列表,並把文件匹配在列表上方
  3. 最後,通過迭代第一個列表並檢查最大修改日期

這只是一個想法,你也可以通過遍歷目錄列表來實現。

1

您可以使用此代碼在您的else塊返回其包含的用戶名(ARR是列表中有包含用戶名的所有文件的名稱)的最新文件:

Collections.sort(arr, new Comparator<File>() { 
    @Override 
    public int compare(String file1, String file2) { 
     return Long.valueOf(new File(file2).lastModified()).compareTo(
        new File(file1).lastModified()); 

    } 

}); 

arr.get(0); // 
0

要獲得最後修改時間戳爲File對象,您確實會調用lastModified()方法。你已經有一個文件ArrayList,所以遍歷它來找到最後修改的字段應該是微不足道的。您也已經循環了文件列表,因此不需要再次循環並找到最後一個修改過的文件。我也建議你的代碼的一些其他優化:

List<File> fileNames = new ArrayList<File>(); // I would rather call this variable "files" though 
long latestModified = -1;  
File lastModifiedFile = null; 

// ... 

for(File file : directory.listFiles()) { 
    // Do your magic 
    if(line.contains(queryUser)) { 
     filesNames.add(file); 
     if(file.lastModified() > latestModified) { 
      lastModifiedFile = file; 
      latestModified = file.lastModified(); 
     } 
    } 
} 

// After the loop, the latest modified file will be held i the variable `lastModifiedFile` 

我不知道什麼ArrayList的目的是,但也許你可以擺脫這一切在一起。

相關問題