在Java中将值重新定义为FilenameFilter

时间:2012-04-19 06:53:56

标签: java io filefilter

我的目录中存在格式为ddMMyyyyhhmmss的文件(例如190420120533481146Wj.jpeg)。我试图从这个目录中只选择最新的10个文件。

现在您可以看到我正在使用当前日期的子字符串(1904201212)搜索文件名。

例如:

Actual Date :19042012121306
Subs value :190420121213

正如您在下面的程序中看到的,我正在使用当前日期分钟值开始搜索。如果当前日期分钟值没有任何文件,

  • 我想将我的搜索重新定义为当前日期时间值,如果没有,则
  • 我想进一步将其重新定义为当前日期值,如果没有找到,
  • 将它重新定义为前几天。

public class Raa {

    public static void main(String args[])
    {
        File myDir = new File("C:\\");
        String res = new Raa().getTime();

        System.out.println(res);


        String substring = res.substring(0,12);
        System.out.println(substring);

        FilenameFilter select = new FileListFilter(substring);

        File[] contents = myDir.listFiles(select);

        for (File file : contents) {
        System.out.println(file.getName());
          }
         }

    public String getTime()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyyhhmmss");
        Date curDate = new Date();
        String strDate = sdf.format(curDate);
        return strDate;

    }
}

我们如何以编程方式不断重新定义搜索?

1 个答案:

答案 0 :(得分:0)

获取文件列表的最佳方法是使用File.listFiles(),并且文档说明无法保证返回的文件的顺序。因此,您需要编写一个使用File.lastModified()的Comparator,并将其与文件数组一起传递给Arrays.sort()。

  

File [] files = directory.listFiles();

     

Arrays.sort(files,new Comparator(){

public int compare(File file1, File file2)
{
    return Long.valueOf(file1.lastModified()).compareTo(file2.lastModified());
} 
     

});

获得文件列表后,只获取数组中的前10个元素。