《2022年使用jsch中的ChannelSftp上传文件和文件夹参考 .pdf》由会员分享,可在线阅读,更多相关《2022年使用jsch中的ChannelSftp上传文件和文件夹参考 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、使用示例String src =E:main3;/本地文件名 String dst =/opt/;/目标文件名 SFTPUtil sftpUtil=new SFTPUtil(sftpDetails);sftpUtil.put(src,dst);import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.HashMap;import java.util.Map
2、;import java.util.Properties;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;publicclass SFTPUtil publicstaticfinal String SFTP_REQ_HOST =host;public
3、staticfinal String SFTP_REQ_PORT =port;publicstaticfinal String SFTP_REQ_USERNAME =username;publicstaticfinal String SFTP_REQ_PASSWORD=password;publicstaticfinalintSFTP_DEFAULT_PORT =22;publicstaticfinal String SFTP_REQ_LOC =location;private Session session=null;private Channel channel=null;private
4、ChannelSftp chSftp;public ChannelSftp getChSftp()returnchSftp;/*名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -*/public SFTPUtil(Map sftpDetails)try chSftp=getChannel(sftpDetails,60000);catch (JSchException e)e.printStackTrace();/*/public SFTPUtil(String ip,String userName,String pwd,String port)Map sftpDetail
5、s=new HashMap();/设置主机 ip,端口,用户名,密码sftpDetails.put(SFTPUtil.SFTP_REQ_HOST,ip);sftpDetails.put(SFTPUtil.SFTP_REQ_USERNAME,userName);sftpDetails.put(SFTPUtil.SFTP_REQ_PASSWORD,pwd);sftpDetails.put(SFTPUtil.SFTP_REQ_PORT,port);try chSftp=getChannel(sftpDetails,60000);catch (JSchException e)e.printStackT
6、race();/*上传文件,支持文件夹上传 *param sPath 源文件目录 *param dPath 目标文件夹 *throws SftpException *see 类、类#方法、类#成员 */publicvoid put(String sPath,String dPath)throws SftpException try chSftp.cd(dPath);catch (SftpException e)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -chSftp.mkdir(dPath);chSftp.cd(dPath);File file=new File(s
7、Path);copyFile(file,chSftp.pwd();/*关闭连接 *see 类、类#方法、类#成员 */publicvoid close()chSftp.quit();try closeChannel();catch (Exception e)e.printStackTrace();/*拷贝文件递归方法 *param file *param pwd *see 类、类#方法、类#成员 */privatevoid copyFile(File file,String pwd)if (file.isDirectory()File list=file.listFiles();try try
8、 String fileName=file.getName();chSftp.cd(pwd);System.out.println(正在创建目录:+chSftp.pwd()+/+fileName);chSftp.mkdir(fileName);System.out.println(目录创建成功:+chSftp.pwd()+/+fileName);catch (Exception e)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -pwd=pwd+/+file.getName();try chSftp.cd(file.getName();catch (SftpExcept
9、ion e)e.printStackTrace();catch (Exception e)e.printStackTrace();for (inti =0;i list.length;i+)copyFile(list i,pwd);else try chSftp.cd(pwd);catch (SftpException e1)e1.printStackTrace();System.out.println(正在复制文件:+file.getAbsolutePath();InputStream instream=null;OutputStream outstream=null;try outstre
10、am=chSftp.put(file.getName();instream=new FileInputStream(file);byteb=new byte 1024;intn;try while(n=instream.read(b)!=-1)outstream.write(b,0,n);catch (IOException e)e.printStackTrace();catch (SftpException e)e.printStackTrace();名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -catch (IOException e)e.printStackTr
11、ace();finally try outstream.flush();outstream.close();instream.close();catch (Exception e2)e2.printStackTrace();/*获取 ChannelSftp *param sftpDetails *param timeout *return *throws JSchException *see 类、类#方法、类#成员 */private ChannelSftp getChannel(Map sftpDetails,inttimeout)throws JSchException String ft
12、pHost=sftpDetails.get(SFTPUtil.SFTP_REQ_HOST);String port =sftpDetails.get(SFTPUtil.SFTP_REQ_PORT);String ftpUserName=sftpDetails.get(SFTPUtil.SFTP_REQ_USERNAME);String ftpPassword=sftpDetails.get(SFTPUtil.SFTP_REQ_PASSWORD);intftpPort=SFTPUtil.SFTP_DEFAULT_PORT;if (port!=null&!port.equals()ftpPort=
13、Integer.valueOf(port);JSch jsch =new JSch();/创建 JSch 对象session=jsch.getSession(ftpUserName,ftpHost,ftpPort);/根据用户名,主机 ip,端口获取一个Session对象 System.out.println(Session created.);if (ftpPassword!=null)session.setPassword(ftpPassword);/设置密码 Properties config=new Properties();名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共
14、 6 页 -config.put(StrictHostKeyChecking,no);session.setConfig(config);/为Session对象设置 propertiessession.setTimeout(timeout);/设置 timeout时间session.connect();/通过 Session建立链接 System.out.println(Session connected.);System.out.println(Opening Channel.);channel=session.openChannel(sftp);/打开 SFTP通道channel.conn
15、ect();/建立 SFTP通道的连接 System.out.println(Connected successfully to ftpHost=+ftpHost+,as ftpUserName=+ftpUserName +,returning:+channel);return(ChannelSftp)channel;/*关闭 *throws Exception *see 类、类#方法、类#成员 */privatevoid closeChannel()throws Exception if (channel!=null)channel.disconnect();if (session!=null)session.disconnect();名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -