58

バイナリファイルの変更タイムスタンプを変更したい。これを行うための最良の方法は何ですか?

ファイルを開いたり閉じたりするのは良いオプションでしょうか?(タイムスタンプの変更がすべてのプラットフォームとJVMで変更されるソリューションが必要です)。

4

7 に答える 7

50

File クラスにはsetLastModifiedメソッドがあります。それがANTの仕事です。

于 2009-09-10T17:07:02.667 に答える
12

簡単なスニペットを次に示します。

void touch(File file, long timestamp)
{
    try
    {
        if (!file.exists())
            new FileOutputStream(file).close();
        file.setLastModified(timestamp);
    }
    catch (IOException e)
    {
    }
}
于 2013-03-30T17:49:30.190 に答える
8

ApacheAntにはまさにそれを行うタスクがあることを私は知っています。Touchのソースコードを
参照してください(これにより、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)です。

于 2009-09-10T16:59:11.323 に答える
6

この質問はタイムスタンプの更新についてのみ言及していますが、とにかくこれをここに入れると思いました。ファイルが存在しない場合も作成するUnixのようなタッチを探していました。

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);
    }
}
于 2013-07-24T16:42:27.987 に答える
6

既にGuavaを使用している場合:

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

于 2015-12-14T11:35:19.507 に答える