我正在使用ChannelSftp(jsch-0.1.42.jar)从unix服务器复制文件,并且可以成功执行此操作但上次修改日期会被当前时间覆盖。
我正在使用 chanSftp.get(nextName,“C:/ Test /”+ nextName);
有没有办法在本地副本上保留远程文件的上次修改时间?
我有使用
的远程文件的最后修改时间attrs = lsEntry.getAttrs();
日期modDate =(Date)format.parse(attrs.getMtimeString());
答案 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())