【问题标题】:finding out the created or accessed or modified date of all files in directory找出目录中所有文件的创建或访问或修改日期
【发布时间】:2014-12-31 17:04:11
【问题描述】:

我需要在一个目录中找到文件的访问、修改、创建日期(在子目录中也是如此)。我听说你可以使用 basicfileattributes 来获取它们。这是我迄今为止尝试过的:

Path file_dir = Paths.get("F:/");

BasicFileAttributes attrs = Files.readAttributes(file_dir, BasicFileAttributes.class);       
System.out.println("Last accessed at:" + attrs.lastAccessTime());
System.out.println("Last modifired at:" + attrs.lastModifiedTime());
System.out.println("Created:" +attrs.creationTime());

我需要在所有文件中找到它们并过滤它们,以便找出 1 天前或 1 小时前创建的文件。

【问题讨论】:

标签: java


【解决方案1】:

给你:

public static void main(String[] args) throws Exception{
    //Folder to search
    File file = new File("C:\\Caixa");

    //Get all files from the folder (including subfolders)
    ArrayList<File> allFiles = new ArrayList<>();
    listFiles(file, allFiles);

    //Filter to use (1 day back from now)
    Calendar filter = Calendar.getInstance();
    filter.add(Calendar.DAY_OF_MONTH, -1);
    //Or 1 hour ago
    //filter.add(Calendar.HOUR_OF_DAY, -1);

    //List to keep the files found using the filter
    List<File> filesFound = new ArrayList<>();

    //Search code
    for (File fileSearched : allFiles) {
        BasicFileAttributes attrs = Files.readAttributes(Paths.get(fileSearched.getAbsolutePath()), BasicFileAttributes.class);      
        Calendar creationTime = Calendar.getInstance();
        creationTime.setTimeInMillis(attrs.creationTime().toMillis());

        if(creationTime.after(filter)){
            filesFound.add(fileSearched);
        }
    }

    //Listing files searched using the filter
    for (File fileFound : filesFound) {
        System.out.println("File found: "+fileFound);
    }
}

public static void listFiles(File directory, ArrayList<File> files) {
    File[] fList = directory.listFiles();
    for (File file : fList) {
        if (file.isFile()) {
            files.add(file);
        } else if (file.isDirectory()) {
            listFiles(file, files);
        }
    }
}

更新

如果你想同时搜索创建和修改时间,你需要做的就是改变一点代码:

//Search code
for (File fileSearched : allFiles) {
    BasicFileAttributes attrs = Files.readAttributes(Paths.get(fileSearched.getAbsolutePath()), BasicFileAttributes.class);      
    Calendar creationTime = Calendar.getInstance();
    creationTime.setTimeInMillis(attrs.creationTime().toMillis());

    Calendar modifiedTime = Calendar.getInstance();
    modifiedTime.setTimeInMillis(attrs.lastModifiedTime().toMillis());

    if(creationTime.after(filter) || modifiedTime.after(filter)){
        filesFound.add(fileSearched);
    }
}

【讨论】:

  • 我得到的只有 .txt 文件
  • 如果您注意到我的代码,它只会按创建时间搜索。请参阅我对按创建和修改时间进行搜索的答案的更新。
  • 当然。如果只想获取特定文件,则需要在 if 子句中添加一条语句:if((creationTime.after(filter) || modifiedTime.after(filter)) &amp;&amp; fileSearched.getName().toLowerCase().endsWith(".txt")){
  • 如果对您有帮助,请务必检查答案是否已接受。
猜你喜欢
  • 2016-12-09
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2015-10-11
相关资源
最近更新 更多