1. 概述
Linux 中的 touch
命令是一个便捷的方式,用于改变文件或目录的访问时间和修改时间,也可以快速创建一个空文件。在这篇简短教程中,我们将学习如何在 Java 中模拟这个命令。
2. 使用纯 Java
2.1. 创建 touch
方法
首先,我们来在 Java 中实现 touch
方法。这个方法会在文件不存在时创建一个空文件,可以更改文件的访问时间和修改时间,或者两者都更改。此外,它还可以接受用户输入的自定义时间:
public static void touch(String path, String... args) throws IOException, ParseException {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
if (args.length == 0) {
return;
}
}
long timeMillis = args.length < 2 ? System.currentTimeMillis() : new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").parse(args[1]).getTime();
if (args.length > 0) {
// change access time only
if ("a".equals(args[0])) {
FileTime accessFileTime = FileTime.fromMillis(timeMillis);
Files.setAttribute(file.toPath(), "lastAccessTime", accessFileTime);
return;
}
// change modification time only
if ("m".equals(args[0])) {
file.setLastModified(timeMillis);
return;
}
}
// other inputs will change both
FileTime accessFileTime = FileTime.fromMillis(timeMillis);
Files.setAttribute(file.toPath(), "lastAccessTime", accessFileTime);
file.setLastModified(timeMillis);
}
如上所示,我们的方法使用了可变参数(varargs
),以避免方法重载,并且可以将格式为 "dd-MM-yyyy hh:mm:ss" 的自定义时间传递给该方法。
2.2. 使用 touch
方法
现在,我们用这个方法创建一个空文件:
touch("test.txt");
然后使用 Linux 中的 stat
命令查看文件信息:
stat test.txt
我们可以看到文件的访问和修改时间在 stat
输出中:
Access: 2021-12-07 10:42:16.474007513 +0700
Modify: 2021-12-07 10:42:16.474007513 +0700
接下来,我们用这个方法更改文件的访问时间:
touch("test.txt", "a", "16-09-2020 08:00:00");
再次使用 stat
命令查看文件信息:
Access: 2020-09-16 08:00:00.000000000 +0700
Modify: 2021-12-07 10:42:16.474007000 +0700
3. 使用 Apache Commons Lang
我们还可以使用 Apache Commons Lang 库中的 FileUtils
类。这个类有一个易于使用的 touch()
方法,如果文件不存在,它也会创建一个空文件:
FileUtils.touch(new File("/home/baeldung/test.txt"));
请注意,如果文件已经存在,此方法只会更新文件的修改时间,不会更改访问时间。
4. 总结
在这篇文章中,我们了解了如何在 Java 中模拟 Linux 中的 touch
命令。如往常一样,本文的示例代码可在 GitHub 上找到。