SFTP服务器文件拷贝

项目中用到了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();
		}

虽然问题解决了,但是其中的原因却不知道,如果哪位知道原因,欢迎留言。

小白第一次写博客,写的不好,请各位多多见谅,如果帮到了遇到相同问题的你,那真是再好不过了。

猜你喜欢

转载自blog.csdn.net/CHN_Li/article/details/79345493