java - 使用 Java 中的旧文件详细信息创建文件
问题描述
我正在尝试创建一个简单的程序,该程序检查是否创建了比今天旧的文件并删除该文件以创建新文件。但是 creatNewFile 方法正在使用旧的(已删除的)文件属性重新创建文件。例如,新文件的创建日期也是昨天。
我在这里做错了什么?
private File createFile() {
logger.trace("Entering createFile method ");
File trackerFile = new File("tracker.txt");
if (!trackerFile.exists()) {
try {
logger.debug("File does not exist . New file being created ");
trackerFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String dateCreated = df.format(this.getCreationTime(trackerFile).toMillis());
logger.debug("File exists file creation time is {}" , dateCreated);
Calendar currCalendar = Calendar.getInstance();
Calendar fileCreateCalendar = Calendar.getInstance();
fileCreateCalendar.setTime(df.parse(dateCreated));
if (currCalendar.get(Calendar.DAY_OF_MONTH) > fileCreateCalendar.get(Calendar.DAY_OF_MONTH)) {
logger.debug("File exists file not created today , being deleted");
trackerFile.delete();
trackerFile.createNewFile();
}
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
logger.trace("Exiting createFile method ");
return trackerFile;
}
请查看这个简单的代码片段。文件被创建、删除然后重新创建。最后创建的文件的创建日期与删除的第一个文件相同。这是怎么发生的?
public class CreateTempFile {
public static void main(String[] args) {
try {
File file = new File("test.txt");
file.createNewFile();
file.delete();
File newFile = new File("test.txt");
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
解决方案
我建议您使用类似的代码来获取日期/时间,以确保您检索到正确的值(例如,创建不是修改等):
Path file = "tracker.txt";
BasicFileAttributes fileAttributes = Files.readAttributes(file, BasicFileAttributes.class);
System.out.println("creationTime: " + fileAttributes.creationTime());
System.out.println("lastAccessTime: " + fileAttributes.lastAccessTime());
System.out.println("lastModifiedTime: " + fileAttributes.lastModifiedTime());
您可以在此处的参考中找到更多详细信息: https ://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html
推荐阅读
- react-native - 在 Google 的 M1 安卓模拟器中进入开发者菜单
- c++ - 迁移到 MSYS2/MinGW64 时标头路径不匹配
- javascript - 如何在chartjs标签中发送多个数据
- python - Tensorflow 2,将 .h5 模型转换为 .tflite,缺少 .pb 和 .pbtext
- objective-c - Obj-C - Google Maps SDK 获取所选标记的数据?
- laravel - 无法使用 Docker 和 Laravel Sail 连接到测试数据库
- api - 我们什么时候应该在 uri 路径中使用冒号?
- javascript - Laravel + Inertia 中带有 API 调用的 Vue 组件
- javascript - 获取不包括 innerHTML 的元素的完整 HTML
- python - 有关解析/替换错误的更多信息