我想获取使用Java在过去7天内修改过的文件。一旦我得到文件,我就需要它用于其他文件操作。
现在我能够从目录中获取所有文件并执行我的文件操作。请建议我如何获取过去7天内修改过的文件。
下面是我用来从目录中获取文件并执行文件操作的代码。
String target_dir = "D:/Reports/Project";
File dir = new File(target_dir);
File[] files = dir.listFiles();
int count = 0;
for (File f : files) {
if(f.isFile()) {
BufferedReader inputStream = null;
FileReader in = null;
try {
// Working Code
}catch (Exception e) {
System.out.println("Error while retreiving files ");
}
finally {
if (inputStream != null) {
inputStream.close();
}
}
}
请建议。在此先感谢。
答案 0 :(得分:2)
查看函数File.lastModified
和Date
中的函数,检查它是否在过去7天内。
答案 1 :(得分:1)
你可以尝试这个, 这将绝对帮助你,
您的导入仅限于此,
import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
.......
public static void main(String[] args) {
File f = new File("your-working-directory-path");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -7);
Date lastDate = calendar.getTime();
System.out.println(lastDate);
for(String file : f.list()){
String filePath = f.getAbsolutePath() + File.separator + file;;
File f1 = new File(filePath);
long diffInDays = getDateDiff(lastDate,new Date(f1.lastModified()),TimeUnit.DAYS);
if(Math.abs(diffInDays) <= 7){
// do your stuff here...
}
}
}
public static long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
long diffInMillies = date2.getTime() - date1.getTime();
return timeUnit.convert(diffInMillies,TimeUnit.MILLISECONDS);
}
答案 2 :(得分:1)
public static void main(String[] args) throws IOException {
String dir = "myDirectory";
// cutoff date:
Instant lastWeek = Instant.now().minus(7, ChronoUnit.DAYS);
// find with filter
Files.find(Paths.get(dir), Integer.MAX_VALUE,
(p, a) -> {
try {
return Files.isRegularFile(p)
&& Files.getLastModifiedTime(p).toInstant().isAfter(lastWeek);
}
catch(IOException e) {
throw new RuntimeException(e);
}
})
.forEach(System.out::println);
}
答案 3 :(得分:0)
使用lastModified()
类的File
方法。这将返回该文件的最后修改时间戳,然后检查这是否在过去7天内。
答案 4 :(得分:0)
尝试使用FileFilter。
long weekAgo = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7);
File directory = new File(target_dir);
File[] files = directory.listFiles(pathname -> pathname.lastModified() >= weekAgo);
for (File file : files) {
// Your code
}