首页 > 解决方案 > 使用 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();
        }
    }
}

标签: javafile

解决方案


我建议您使用类似的代码来获取日期/时间,以确保您检索到正确的值(例如,创建不是修改等):

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


推荐阅读