使用Java模拟触摸命令

我想更改二进制文件的修改时间戳。 这样做的最好方法是什么?

打开和closures文件是一个不错的select? (我需要在每个平台和JVM上修改时间戳的解决scheme)。

File类有一个setLastModified方法。 这就是ANT所做的。

我的2美分,基于@ Joe.M的答案

 public static void touch(File file) throws IOException{ long timestamp = System.currentTimeMillis(); touch(file, timestamp); } public static void touch(File file, long timestamp) throws IOException{ if (!file.exists()) { new FileOutputStream(file).close(); } file.setLastModified(timestamp); } 

我知道Apache Ant有一个任务就是这么做的。
看看Touch的源代码 (可以告诉你他们是怎么做的)

他们使用FILE_UTILS.setFileLastModified(file, modTime); ,它使用ResourceUtils.setLastModified(new FileResource(file), time); ,它使用org.apache.tools.ant.types.resources.Touchable ,由org.apache.tools.ant.types.resources.FileResource实现…

基本上,这是对File.setLastModified(modTime)的调用。

这是一个简单的片段:

 void touch(File file, long timestamp) { try { if (!file.exists()) new FileOutputStream(file).close(); file.setLastModified(timestamp); } catch (IOException e) { } } 

这个问题只提到更新时间戳,但我想我会把它放在这里。 我正在寻找像在Unix中的触摸,如果它不存在,也将创build一个文件。

对于使用Apache Commons的人来说, FileUtils.touch(File file)就是这样做的。

这是来自(内联openInputStream(File f) )的源代码 :

 public static void touch(final File file) throws IOException { if (file.exists()) { if (file.isDirectory()) { throw new IOException("File '" + file + "' exists but is a directory"); } if (file.canWrite() == false) { throw new IOException("File '" + file + "' cannot be written to"); } } else { final File parent = file.getParentFile(); if (parent != null) { if (!parent.mkdirs() && !parent.isDirectory()) { throw new IOException("Directory '" + parent + "' could not be created"); } } final OutputStream out = new FileOutputStream(file); IOUtils.closeQuietly(out); } final boolean success = file.setLastModified(System.currentTimeMillis()); if (!success) { throw new IOException("Unable to set the last modification time for " + file); } } 

如果您已经使用番石榴 :

com.google.common.io.Files.touch(file)

由于File是一个糟糕的抽象 ,最好使用FilesPath

 public static void touch(final Path path) throws IOException { Objects.requireNotNull(path, "path is null"); if (Files.exists(path)) { Files.setLastModifiedTime(path, FileTime.from(Instant.now())); } else { Files.createFile(path); } }