BasicFileAttributes混淆:真正的创作时间是什么?

时间:2015-06-26 13:48:49

标签: java

我自动处理从大型机接收的平面文件,并对创建和修改时间感到困惑。文件在大型机上创建,然后通过电子邮件发送给所需的个人。然后,个人通过电子邮件(Outlook)保存文件,并执行他们用它们做的任何事情。

对于该自动化,将自动处理该文件。我需要让用户知道最后一个文件的加载时间,并为他们提供加载新文件的选项。

我的问题与时俱进:我的创建日期/时间晚于最后修改时间。使用此代码:

 try {
        DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        DateFormat cstFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        cstFormat.setTimeZone(TimeZone.getTimeZone("America/Chicago"));

        Path filePath = Paths.get("C:/data/KWJFLTD.XLS");
        BasicFileAttributes basicAttr = Files.readAttributes(filePath, BasicFileAttributes.class);

        FileTime creationTime = basicAttr.creationTime();
        FileTime modifiedTime = basicAttr.lastModifiedTime();
        String cTime = creationTime.toString();
        String mTime = modifiedTime.toString();
        Date dc = utcFormat.parse(cTime);
        Date dm = utcFormat.parse(mTime);

        cTime = cstFormat.format(dc);
        mTime = cstFormat.format(dm);

        System.out.println("Creation Time:  " + cTime);
        System.out.println("Modified Time:  " + mTime);

    } catch (IOException ex) {
        Logger.getLogger(FAULoad.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ParseException ex){
        Logger.getLogger(FAULoad.class.getName()).log(Level.SEVERE, null, ex);
    }

我得到了这个结果:

Creation Time:  2015-06-24 15:25:12
Modified Time:  2015-06-24 02:28:05

我最后修改时间后的创建时间。这是因为创建时间是从电子邮件中保存的吗?在这种情况下,鉴于(理论上)自生成以来没有进行任何修改,最后修改时间是否与创建日期相同?

1 个答案:

答案 0 :(得分:1)

根据Microsoft Documentation(该链接与Win XP有关,但大多数情况也适用于Win 10),修改时间是文件内容上次写入的时间,而创建时间是时间已创建特定文件。

因此,如果复制文件,修改日期不会改变,因为没有内容已被写入/更改,但是已创建新文件(副本),因此创建时间将在修改时间之后。