如何获取文件的正确文件创建日期?
我不需要上次修改时间而不是上次文件访问时间,而是文件创建时间。 我还没有找到有关此信息。 也许一些libs?
Path p = Paths.get(f.getAbsoluteFile().toURI()); BasicFileAttributes view = null; try { view = Files.getFileAttributeView(p, BasicFileAttributeView.class).readAttributes(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } FileTime creationTime = view.creationTime();
在此代码创建时间无效并返回今天的日期。
操作系统:Windows 7 Java:SE-1.7
正如yshavit所说,并非所有操作系统都记录创建的日期。 但是,您应该能够使用java.nio.file
来确定具有此function的操作系统上的此信息 – 请参阅files.getAttribute
的文档 – 请注意, BasicFileAttributeView
具有creationTime
的字段。
您可以使用FileSystems.getDefault();
确定当前操作系统支持哪些FileAttributeView
。
Files.getAttribute(path, "basic:createdAt");
将返回一个FileTime
对象,其中包含在支持BasicFileAttributeView
的系统上创建文件的日期。 你必须将它转换为java.util.Date
对象,但我会让你自己解决这个问题。
进一步阅读
- 用于
getAttribute()
NIO API -
BasicFileAttributeView
NIO API - 使用
readAttributes()
教程 - 有关使用FileAttributes的综合教程
- 同一主题上的另一个StackOverflow 线程
如何使用BasicFileAttributes
类在Java
获取文件的创建日期,这是一个示例:
Path path = Paths.get("C:\\Users\\jorgesys\\workspaceJava\\myfile.txt"); BasicFileAttributes attr; try { attr = Files.readAttributes(path, BasicFileAttributes.class); System.out.println("Creation date: " + attr.creationTime()); } catch (IOException e) { System.out.println("oops error! " + e.getMessage()); }
您将无法在所有系统中执行此操作,因为并非所有系统都会记录该信息。 例如,Linux没有; 看到这个SO线程 。
许多程序通过复制文件来“修改”文件,对副本进行更改,然后将副本移动到原始文件的位置。 所以对于那些人来说,创造和最后修改之间没有明显的区别。