2012-02-14 494 views
1

我使用ChannelSftp(jsch-0.1.42.jar)從unix服務器複製文件,並且可以成功完成,但最後修改日期被當前時間覆蓋。保留最後修改日期,同時使用ChannelSftp進行文件傳輸

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

有什麼辦法保留遠程文件上次修改時間在本地副本上?

我有我使用

ATTRS = lsEntry.getAttrs得到遠程文件的上次修改時間();

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

回答

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

使用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的。