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

问题描述 投票:1回答:3

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

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

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

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

attrs = lsEntry.getAttrs();

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

jsch
3个回答
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() bug是固定的。


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

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())
© www.soinside.com 2019 - 2024. All rights reserved.