【java】java io操作把返回为long 型毫秒格式化为标准时间

本文介绍如何使用Java代码查询指定路径下图片文件的最后修改时间,并将其格式化为标准时间形式。
我是用一个在e盘下的一个问Sunset.jpg图片文件进行测试的。
测试为:查询其最近修改时间,并把其修改时间格式化为标准的时间形式。


package lastChange;

import java.io.File;
import java.util.Date;


public class lastchange {
public static void main (String [] args){
String path = "e:\\Sunset.jpg";
File f = new File(path);
Date dt = new Date();
dt.setTime(f.lastModified());//f.lastModified()是返回一个以毫秒形式的值,
//此值是从1970 年 1 月 1 日,00:00:00 GMT到最后修改时间的返回值。
//利用date中的setTime(long)格式化为标准时间
System.out.println(f.lastModified());//以毫秒形式返回时间。此事件相对1970 年 1 月 1 日,00:00:00 GMT。
System.out.println(dt);
}
}
<think> 我们参考用户的查询:“我想查找使用Java读取目录创建时间的方法”。用户特别提到“目录”,而不仅仅是文件。 查阅提供的引用: 引用[1]展示了获取文件最后修改时间的方法,使用的是`File.lastModified()`方法。但注意,这是最后修改时间,不是创建时间。 引用[2]提到了Java时间日期类和File类,其中File类常用方法包括`lastModified()`,但同样,这个方法返回的是最后修改时间,不是创建时间。 引用[3]展示了一个通过执行系统命令(dir命令)来获取文件创建时间的方法,但这个方法仅适用于Windows,而且代码示例中处理的是文件(File),并没有明确提及目录。 然而,用户需要的是读取“目录”的创建时间。 关键点: 1.Java中,标准的`File`类(在java.io包中)只提供了`lastModified()`方法(修改时间),没有直接提供获取创建时间的方法。 2.Java 7开始,引入了NIO.2(java.nio.file包),其中`Files`类和`BasicFileAttributes`接口可以获取文件的创建时间(包括目录,因为目录也是文件)。 因此,我们可以使用Java NIO的`Files.readAttributes()`方法来获取目录的创建时间。 步骤: 1. 使用`Paths.get()`方法获取目录的Path对象。 2. 使用`Files.readAttributes()`读取文件的基本属性,包括创建时间。 3. 从属性中获取创建时间(creationTime)。 注意:创建时间依赖于文件系统的支持,如果文件系统不支持,则可能返回null或最后修改时间。 代码示例: ```java import java.nio.file.*; import java.nio.file.attribute.*; import java.io.IOException; public class DirectoryCreationTime { public static void main(String[] args) { Path dirPath = Paths.get("目录路径"); // 替换为实际的目录路径 try { BasicFileAttributes attrs = Files.readAttributes(dirPath, BasicFileAttributes.class); FileTime creationTime = attrs.creationTime(); System.out.println("目录创建时间: " + creationTime); // 如果需要格式化,可以使用SimpleDateFormat // 例如:SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // String formatted = formatter.format(new Date(creationTime.toMillis())); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码中,我们使用了`BasicFileAttributes`的`creationTime()`方法获取创建时间返回的是`FileTime`对象,可以直接输出,也可以转换为毫秒进行格式化。 另外,引用[1]中提供了一个格式时间的例子,我们可以借鉴来格式化创建时间。 因此,我们可以将创建时间格式化为用户指定的格式(如引用[1]中的"yyyy/MM/dd HH:mm:ss")。 格式化示例: ```java import java.text.SimpleDateFormat; import java.util.Date; // 在获取到creationTime后 long millis = creationTime.toMillis(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String formattedTime = formatter.format(new Date(millis)); System.out.println("目录创建时间: " + formattedTime); ``` 注意:如果目录不存在,会抛出异常,所以需要确保目录存在。 另外,引用[3]中提到了使用系统命令的方式,但这种方式可移植性差(仅适用于Windows),而且需要处理命令行的解析,所以不推荐。 总结:推荐使用Java NIO的Files和BasicFileAttributes来获取目录的创建时间,并格式化输出。 考虑到用户可能使用的是较旧的Java版本(如Java 6或更早),如果无法使用NIO,则可能需要使用系统命令等非标准方式。但根据当前主流情况,我们假设用户可以使用Java 7及以上。 因此,我们提供基于Java NIO的解决方案。 相关问题: 1. 如果文件系统不支持创建时间属性,该如何处理? 2. 如何获取目录的其他属性(如最后访问时间、最后修改时间)? 3.Java中如何递归获取一个目录下所有子目录的创建时间? 4. 除了使用SimpleDateFormat,还有哪些方式可以格式时间? </think> ### Java读取目录创建时间的方法 在Java中,**目录创建时间无法直接通过标准`File`类获取**,因为`File.lastModified()`只提供最后修改时间,而非创建时间。以下是两种有效的解决方案: --- ### ✅ 推荐方案:使用NIO.2 API(Java 7+) ```java import java.nio.file.*; import java.nio.file.attribute.*; import java.text.SimpleDateFormat; public class DirectoryCreationTime { private static final String DATE_FORMAT = "yyyy/MM/dd HH:mm:ss"; public static void main(String[] args) throws Exception { Path dirPath = Paths.get("C:/your/directory/path"); // 获取文件基础属性 BasicFileAttributes attrs = Files.readAttributes( dirPath, BasicFileAttributes.class ); // 读取创建时间格式化 FileTime creationTime = attrs.creationTime(); String formattedTime = new SimpleDateFormat(DATE_FORMAT) .format(creationTime.toMillis()); System.out.println("目录创建时间: " + formattedTime); // 输出示例: 2023/05/10 14:30:45 } } ``` **关键说明**: 1. **`Files.readAttributes()`** 读取目录的元据,包括创建时间(`creationTime`) 2. **`BasicFileAttributes`** 提供创建时间/访问时间/修改时间等属性 3. **跨平台支持** 兼容Windows/macOS/Linux(需文件系统支持) --- ### ️ 替代方案:系统命令(仅限Windows) ```java public static String getDirCreationTime(File dir) throws IOException { Process process = Runtime.getRuntime().exec( "cmd /c dir \"" + dir.getAbsolutePath() + "\" /tc" ); try (BufferedReader reader = new BufferedReader( new InputStreamReader(process.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { if (line.contains(dir.getName())) { // 解析命令输出中的日期字符串 return line.substring(0, 17).replace(&#39;-&#39;, &#39;/&#39;); } } } return "无法获取"; } ``` **局限性**: - 仅适用于Windows系统 - 依赖`dir /tc`命令输出格式 - 存在安全风险和性能开销[^3] --- ### 📌 重要注意事项 1. **文件系统依赖性** 创建时间的可用性取决于文件系统(NTFS支持,FAT32不支持) 2. **时间精度问题** 部分文件系统只记录日期,不记录精确到秒的时间 3. **NIO.2优先原则** 官方API比系统命令更稳定可靠[^2] > 当文件系统不支持创建时间属性时,`creationTime()`可能返回与`lastModifiedTime()`相同的值[^2]。 --- ### 相关问题 1. 如何递归获取目录下所有子文件夹的创建时间? 2. Java NIO.2中还有哪些重要的文件属性接口? 3. 如何在Linux系统下获取目录创建时间? 4. 为什么`File`类不提供创建时间的API设计? [^1]: 示例展示了文件最后修改时间的获取方法,但目录需要特殊处理 [^2]: Java NIO.2提供了更完善的文件属性访问接口 [^3]: 系统命令方式存在跨平台兼容性问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值