如何从文件列表中获取最后修改的文件

时间:2013-04-01 11:52:29

标签: java

我的目录中包含用户名和电话号码的文本文件列表。每次用户更改其保存在同一目录中的新文件中的电话号码。现在我正在搜索 一个用户,其条目存在于多个文件中。如何找到上次修改文件的名称..? 下面是我目前提出的代码片段。

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()函数。比较这个函数返回的值是唯一的选项..?

5 个答案:

答案 0 :(得分: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); //

答案 1 :(得分:0)

使用file.lastModified()获取每个文件的最后修改日期,然后相互比较

答案 2 :(得分:0)

Java没有这项工作的现成API,但可以通过使用.lastModified()方法在日期周围添加一些逻辑来轻松实现,或者也可以使用Apache FileUtils。我建议使用Apache Utils。

我会这样:

  1. 为包含与您的查询匹配的数据的文件声明列表
  2. 遍历目录并将文件匹配放在上面的列表中
  3. 最后,迭代第一个列表并检查最大修改日期
  4. 这只是一个想法,您也可以通过遍历目录列表来实现相同目的。

答案 3 :(得分: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的目的是什么,但也许你可以一起摆脱它。

答案 4 :(得分: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();
            }
        }
    }