java – file.lastModified()从来没有设置与file.setLastModified()

前端之家收集整理的这篇文章主要介绍了java – file.lastModified()从来没有设置与file.setLastModified()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Nexus One上的 Android 2.3.4上设置和阅读了毫无疑问的问题.这是代码
File fileFolder = new File(Environment.getExternalStorageDirectory(),appName + "/"
    + URLDecoder.decode(folder.getUrl()));
if (fileFolder != null && !fileFolder.exists()) {
  fileFolder.setLastModified(1310198774);
  fileFolder.mkdirs();
  fileFolder.setLastModified(1310198774);
}

if (fileFolder != null && fileFolder.exists()) {
  long l = fileFolder.lastModified();
}

在这个小测试中我写了1310198774,但是从lastModified()返回的结果是1310199771000.

即使我剪掉了尾随的“000”,差不多几分钟.

我需要在webservice和Android设备之间同步文件.最后一次修改是该服务发送的数据的一部分.我将millis设置为创建/复制的文件文件夹,以检查文件/文件夹是否需要覆盖.

一切正常工作,但从文件系统返回的毫秒数与设置的值不同.

我确定我的代码有问题,但我找不到.

提前谢谢了.
HJW

解决方法

所以也许我错过了一些,但我看到你的代码上面的一些问题.您的具体问题可能是由于(@JB提到的)Android问题,但是对于后代,我以为我会提供一个答案.

首先,File.setLastModified()花费几毫秒的时间.这是javadocs.你似乎试图在几秒钟内设置它.所以你的代码应该是这样的:

fileFolder.setLastModified(1310198774000L);

如在javadoc中所提到的,许多文件系统只支持最后修改时间的秒粒度.因此,如果您需要在文件中看到相同的修改时间,那么您应该执行以下操作:

private void changeModificationFile(File file,long time) {
    // round the value down to the nearest second
    file.setLastModified((time / 1000) * 1000);
}

猜你在找的Java相关文章