我在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); }