importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.util.Properties; importjava.util.Vector; importorg.apache.commons.io.IOUtils; importorg.apache.log4j.Logger; importcom.jcraft.jsch.Channel; importcom.jcraft.jsch.ChannelSftp; importcom.jcraft.jsch.JSch; importcom.jcraft.jsch.JSchException; importcom.jcraft.jsch.Session; importcom.jcraft.jsch.SftpException; /*** 类说明 sftp工具类*/publicclassSFTPUtil { privatestaticLoggerlogger=Logger.getLogger(SFTPUtil.class); privateChannelSftpsftp; privateSessionsession; /** SFTP 登录用户名*/privateStringusername; /** SFTP 登录密码*/privateStringpassword; /** 私钥 */privateStringprivateKey; /** SFTP 服务器地址IP地址*/privateStringhost; /** SFTP 端口*/privateintport; /*** 构造基于密码认证的sftp对象*/publicSFTPUtil(Stringusername, Stringpassword, Stringhost, intport) { this.username=username; this.password=password; this.host=host; this.port=port; } /*** 构造基于秘钥认证的sftp对象*/publicSFTPUtil(Stringusername, Stringhost, intport, StringprivateKey) { this.username=username; this.host=host; this.port=port; this.privateKey=privateKey; } publicSFTPUtil(){} /*** 连接sftp服务器*/publicvoidlogin(){ try { JSchjsch=newJSch(); if (privateKey!=null) { jsch.addIdentity(privateKey);// 设置私钥 } session=jsch.getSession(username, host, port); if (password!=null) { session.setPassword(password); } Propertiesconfig=newProperties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); Channelchannel=session.openChannel("sftp"); channel.connect(); sftp= (ChannelSftp) channel; } catch (JSchExceptione) { e.printStackTrace(); } } /*** 关闭连接 server*/publicvoidlogout(){ if (sftp!=null) { if (sftp.isConnected()) { sftp.disconnect(); } } if (session!=null) { if (session.isConnected()) { session.disconnect(); } } } /*** 将输入流的数据上传到sftp作为文件。文件完整路径=basePath+directory* @param basePath 服务器的基础路径* @param directory 上传到该目录* @param sftpFileName sftp端文件名* @param input 输入流*/publicvoidupload(StringbasePath,Stringdirectory, StringsftpFileName, InputStreaminput) throwsSftpException{ try { sftp.cd(basePath); sftp.cd(directory); } catch (SftpExceptione) { //目录不存在,则创建文件夹String [] dirs=directory.split("/"); StringtempPath=basePath; for(Stringdir:dirs){ if(null==dir||"".equals(dir)) continue; tempPath+="/"+dir; try{ sftp.cd(tempPath); }catch(SftpExceptionex){ sftp.mkdir(tempPath); sftp.cd(tempPath); } } } sftp.put(input, sftpFileName); //上传文件 } /*** 下载文件。* @param directory 下载目录* @param downloadFile 下载的文件* @param saveFile 存在本地的路径*/publicvoiddownload(Stringdirectory, StringdownloadFile, StringsaveFile) throwsSftpException, FileNotFoundException{ if (directory!=null&&!"".equals(directory)) { sftp.cd(directory); } Filefile=newFile(saveFile); sftp.get(downloadFile, newFileOutputStream(file)); } /*** 下载文件* @param directory 下载目录* @param downloadFile 下载的文件名* @return 字节数组*/publicbyte[] download(Stringdirectory, StringdownloadFile) throwsSftpException, IOException{ if (directory!=null&&!"".equals(directory)) { sftp.cd(directory); } InputStreamis=sftp.get(downloadFile); byte[] fileData=IOUtils.toByteArray(is); returnfileData; } /*** 删除文件* @param directory 要删除文件所在目录* @param deleteFile 要删除的文件*/publicvoiddelete(Stringdirectory, StringdeleteFile) throwsSftpException{ sftp.cd(directory); sftp.rm(deleteFile); } /*** 列出目录下的文件* @param directory 要列出的目录* @param*/publicVector<?>listFiles(Stringdirectory) throwsSftpException { returnsftp.ls(directory); } //上传文件测试publicstaticvoidmain(String[] args) throwsSftpException, IOException { SFTPUtilsftp=newSFTPUtil("neusoft", "neusoft_980544", "192.168.205.4", 22); sftp.login(); Filefile=newFile("D:\\1.txt"); InputStreamis=newFileInputStream(file); sftp.upload("/home/neusoft/","ftp", "1.txt", is); sftp.logout(); }
* 需要用到的maven jar包
<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.1</version></dependency><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>