项目中用到了SFTP相关的一些东西,之前用到了FTP,个人感觉SFTP和FTP使用起来差不多,网上关于SFTP和FTP的文章很多,这里就不说了。在这里说一下我遇到的一些问题。
在项目的要求中,需要读取文件的MD5值,进行对比,如果不相同,则进行同步操作。通过ChannelSftp的get方法获取文件流,通过put方法将文件写到指定位置。而在执行中,代码执行到put便停止住,而SFTP服务则一直处于连接状态。代码如下:
//复制文件
public void copyfile(ChannelSftp tChannelSftp ,String src) throws SftpException, IOException {
InputStream tInputStream = null;
//创建要拷贝到的文件夹
tChannelSftp.mkdir(路径);
//获取文件流
tInputStream = tChannelSftp.get(src);
//将读取到的文件流写到指定路径处
tChannelSftp.put(tInputStream, 路径);
tInputStream.close();
}
检查服务器上的文件后,发现文件已经正确复制,可是代码并不继续执行。经过多次修改之后,发现是InputStream的问题,而将InputStream拷贝之后再使用,问题便成功解决。
//复制文件
public void copyfile(ChannelSftp tChannelSftp ,String src) throws SftpException, IOException {
InputStream tInputStream = null;
tChannelSftp.mkdir(路径);
tInputStream = tChannelSftp.get(src);
//拷贝读取到的文件流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = tInputStream.read(buffer)) > -1 ) {
baos.write(buffer, 0, len);
}
baos.flush();
InputStream nInputStream = new ByteArrayInputStream(baos.toByteArray());
tChannelSftp.put(nInputStream, 路径);
nInputStream.close();
baos.close();
tInputStream.close();
}
虽然问题解决了,但是其中的原因却不知道,如果哪位知道原因,欢迎留言。
小白第一次写博客,写的不好,请各位多多见谅,如果帮到了遇到相同问题的你,那真是再好不过了。