使用ChannelSftp进行文件传输时保留上次修改日期

时间:2012-02-14 17:49:26

标签: jsch

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

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

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

我有使用

的远程文件的最后修改时间

attrs = lsEntry.getAttrs();

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

3 个答案:

答案 0 :(得分:10)

使用SimpleDateFormat性能较差。相反,可以直接使用方法getMTime()getATime()。但它们提供的值减少了几毫秒。 这就是为什么他们按照预期int返回long而不是date.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.51 中,缺少因子的getAtimeString()错误已修复。

答案 1 :(得分:3)

这会更改从远程服务器下载的文件的上次修改时间

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());

答案 2 :(得分:0)

将以上答案合并为可行的解决方案:

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())