有什么办法可以通过SFTP通过文件名生成包含yyyyMMddHHmmss的文件

时间:2018-12-27 10:04:50

标签: java

我正在尝试通过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());
    }

1 个答案:

答案 0 :(得分:0)

呼叫getFileDate2()时,您使用的是Calendar.getInstance(),每次执行时都会获得当前时间。第二次找不到文件时调用它,因为文件名中使用的时间是过去的时间,而您得到的是最近的时间。

您应该调用Calendar.getInstance() 一次,并将日期存储在对象中,而不是每次都获取一个新实例。使用保存的日期,您将能够获取保存的文件。

来自docs

  

getInstance():获取一个   使用默认时区和区域设置的日历。 日历返回   是基于默认时区中的当前时间   语言环境。返回:日历。