Tod*_*odd 98 java filesystems date
在StackOverflow上有另一个类似的问题(如何在Java中获取文件的创建日期),但答案并不是真的存在,因为OP有不同的需求可以通过其他机制解决.我正在尝试创建一个目录中的文件列表,可以按年龄排序,因此需要文件创建日期.
经过大量的网络搜寻,我没有找到任何好办法.是否有获取文件创建日期的机制?
BTW,目前在Windows系统上,也可能需要它在Linux系统上工作.此外,我不能保证在名称中嵌入创建日期/时间的情况下将遵循文件命名约定.
rin*_*rer 155
只要文件系统提供,Java nio就可以选择访问creationTime和其他元数据.检查此链接了
例如(根据@ ydaetskcoR的评论提供):
Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());
Run Code Online (Sandbox Code Playgroud)
Ole*_*nko 14
我用这个代码使用JDK 7解决了这个问题:
package FileCreationDate;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Main
{
public static void main(String[] args) {
File file = new File("c:\\1.txt");
Path filePath = file.toPath();
BasicFileAttributes attributes = null;
try
{
attributes =
Files.readAttributes(filePath, BasicFileAttributes.class);
}
catch (IOException exception)
{
System.out.println("Exception handled when trying to get file " +
"attributes: " + exception.getMessage());
}
long milliseconds = attributes.creationTime().to(TimeUnit.MILLISECONDS);
if((milliseconds > Long.MIN_VALUE) && (milliseconds < Long.MAX_VALUE))
{
Date creationDate =
new Date(attributes.creationTime().to(TimeUnit.MILLISECONDS));
System.out.println("File " + filePath.toString() + " created " +
creationDate.getDate() + "/" +
(creationDate.getMonth() + 1) + "/" +
(creationDate.getYear() + 1900));
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ent 13
作为这个问题的后续 - 因为它与创建时间有关,并讨论通过新的nio类获得它 - 现在看来JDK7的实现中你运气不好.附录:OpenJDK7中的行为相同.
在Unix文件系统上,您无法检索创建时间戳,只需获取上次修改时间的副本即可.太伤心了,但不幸的是真的.我不确定为什么会这样,但代码具体如此,如下所示.
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
public class TestFA {
static void getAttributes(String pathStr) throws IOException {
Path p = Paths.get(pathStr);
BasicFileAttributes view
= Files.getFileAttributeView(p, BasicFileAttributeView.class)
.readAttributes();
System.out.println(view.creationTime()+" is the same as "+view.lastModifiedTime());
}
public static void main(String[] args) throws IOException {
for (String s : args) {
getAttributes(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jor*_*sys 11
这是如何Java使用BasicFileAttributes类获取文件创建日期的基本示例:
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());
//System.out.println("Last access date: " + attr.lastAccessTime());
//System.out.println("Last modified date: " + attr.lastModifiedTime());
} catch (IOException e) {
System.out.println("oops error! " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
API java.io.File仅支持获取上次修改时间.互联网在这个话题上也很安静.
除非我遗漏了一些重要内容,否则Java库(包括但尚未包括Java 7)不包含此功能.因此,如果您对此非常不满,一种解决方案是编写一些C(++)代码来调用系统例程并使用JNI调用它.但是,大多数这项工作似乎已经在一个名为JNA的库中完成了.
尽管如此,您可能仍需要在Java中执行一些特定于操作系统的编码,因为您可能找不到Windows和Unix/Linux/BSD/OS X中可用的相同系统调用.
在Windows系统上,您可以使用免费的FileTimes库.
使用Java NIO.2(JDK 7)和java.nio.file.attribute包将来会更容易.
但请记住,大多数Linux文件系统不支持文件创建时间戳.