我正在尝试通过SFTP发送文件,并且文件名包含yyyyMMddHHmmss
。
生成文件后,我需要将SFTP发送到远程服务器,并且由于文件生成时间与我尝试进行SFTP的时间之间存在时间差,因此我遇到了(没有此类文件或目录)错误。
例如。
文件1:Extract_20181227172954.txt
我的sftp代码试图查找文件名为
的文件Extract_20181227173000.txt
//file generation
File = getFilePath() + "Extract_"+ + this.getFileDate2() + ".txt";
PrintWriter pw = new PrintWriter(File);
//Extract_20181227172954.txt --sample file extracted
//sftp method
public boolean upload( String filePath, String fileName) {
JSch jSch = new JSch();
File localFile = new File(filePath + fileName);
this.channelSftp.put(new FileInputStream(localFile), localFile.getName());
}
//sftp is trying to find file Extract_20181227173000.txt instead of Extract_20181227172954.txt
//calling the sftp method
this.sftpSucess = sftp.upload(getFilePath(), "Extract_"+ + getFileDate2() + ".txt");
//filedate method
SimpleDateFormat fileDate2 = new SimpleDateFormat("yyyyMMddHHmmss");
private String getFileDate2() {
Calendar calendar = Calendar.getInstance();
return this.fileDate2.format(calendar.getTime());
}
答案 0 :(得分:0)
呼叫getFileDate2()
时,您使用的是Calendar.getInstance()
,每次执行时都会获得当前时间。第二次找不到文件时调用它,因为文件名中使用的时间是过去的时间,而您得到的是最近的时间。
您应该调用Calendar.getInstance()
一次,并将日期存储在对象中,而不是每次都获取一个新实例。使用保存的日期,您将能够获取保存的文件。
来自docs:
getInstance():获取一个 使用默认时区和区域设置的日历。 日历返回 是基于默认时区中的当前时间 语言环境。返回:日历。