3

我正在使用 ChannelSftp(jsch-0.1.42.jar) 从 unix 服务器复制文件并且可以成功执行此操作,但最后修改的日期会被当前时间覆盖。

我正在使用 chanSftp.get(nextName, "C:/Test/" + nextName);

有没有办法在本地副本上保留远程文件的最后修改时间?

我有我使用的远程文件的最后修改时间

attrs = lsEntry.getAttrs();

日期 modDate = (Date) format.parse(attrs.getMtimeString());

4

3 回答 3

10

使用 aSimpleDateFormat的性能较低。相反,可以getMTime()直接使用这些方法getATime()。但它们提供的值减少了毫秒。这就是为什么他们按照预期返回 aint而不是 a的原因。longdate.getTime()

SftpATTRS attrs = lsEntry.getAttrs();
Date dateModify = new Date(attrs.getMTime() * 1000L);
Date dateAccess = new Date(attrs.getATime() * 1000L);

jsch-0.1.50中小心使用缺少getAtimeString()因素1000L


jsch-0.1.51getAtimeString()修复了缺少因子的错误。

于 2014-02-05T12:47:28.733 回答
4

这会更改从远程服务器下载的文件的最后修改时间,

String remoteFilePath = "testDir/testFile.txt";
SftpATTRS attrs = sftpChannel.lstat(remoteFilePath);
SimpleDateFormat format = new SimpleDateFormat(
                "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
Date modDate = (Date) format.parse(attrs.getMtimeString());
String localFilePath = "C:/temp/downloadedFile.txt";
sftpChannel.get(remoteFilePath, localFilePath);
File downloadedFile = new File(localFilePath);
downloadedFile.setLastModified(modDate.getTime());
于 2013-02-20T16:11:21.217 回答
1

将上述答案合并到一个可行的解决方案中:

sftpChannel.get(REMOTE_FILE, LOCAL_FILE);
SftpATTRS attrs = sftpChannel.lstat(REMOTE_FILE);
Date dateModify = new Date(attrs.getMTime() * 1000L);
File downloadedFile = new File(LOCAL_FILE);
downloadedFile.setLastModified(dateModify.getTime())
于 2018-12-15T22:44:21.273 回答