我需要在目录中找到文件的访问,修改和创建日期(在子目录中也是如此)。我听说你可以使用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小时前创建的文件。
答案 0 :(得分: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);
}
}
}
<强>更新强>
如果您想通过BOTH创建和修改时间进行搜索,您只需要更改一些代码:
//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);
}
}