2013-04-01 111 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的目的是,但也许你可以摆脱这一切在一起。

相关问题