Java Sftp上传下载文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Sftp上传下载文件相关的知识,希望对你有一定的参考价值。
需要使用jar包 jsch-0.1.50.jar
sftp上传下载实现类
package com.bstek.transit.sftp; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; 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; public class SFtpClient { private String ftpHost; private int ftpPort; private String uploadRemotePath; //上传到的服务器目录 private String downloadRemotePath;//从服务器哪个目录下载 private String userName; private String password; private int timeOut = 30000; private Session session = null; private ChannelSftp channel = null; public SFtpClient() { super(); } public SFtpClient(String ftpHost, int ftpPort, String uploadRemotePath, String downloadRemotePath, String userName, String password) { super(); this.ftpHost = ftpHost; this.ftpPort = ftpPort<=0? 22:ftpPort ; this.uploadRemotePath = uploadRemotePath; this.downloadRemotePath = downloadRemotePath; this.userName = userName; this.password = password; } /** * 利用JSch包通过SFTP链接 * @throws JSchException */ public void connect() throws JSchException { try { JSch jsch = new JSch(); session = jsch.getSession(userName, ftpHost, ftpPort); // 如果服务器连接不上,则抛出异常 if (session == null) { throw new JSchException("session is null"); } session.setPassword(password);// 设置密码 session.setConfig("StrictHostKeyChecking", "no");// 设置第一次登陆的时候提示,可选值:(ask // | yes | no) //设置登陆超时时间 session.connect(timeOut); channel = (ChannelSftp) session.openChannel("sftp");// 创建sftp通信通道 channel.connect(1000); } catch (JSchException e) { e.printStackTrace(); session.disconnect(); channel.disconnect(); throw e; } } /** * 上传文件 * @param localFile 本地上传文件 * @throws SftpException * @throws IOException */ public void uploadFile(File localFile) throws SftpException, IOException { String fullremoteFileName = this.uploadRemotePath + localFile.getName(); this.uploadFile(localFile, fullremoteFileName); } public void uploadFile(File localFile, String fullremoteFileName) throws IOException, SftpException { OutputStream outstream = null; InputStream instream = null; try { // 判断是否是文件夹 if (!isPath(fullremoteFileName.substring(0, fullremoteFileName.lastIndexOf("/")))) { createPath(fullremoteFileName.substring(0, fullremoteFileName.lastIndexOf("/"))); } outstream = channel.put(fullremoteFileName); instream = new FileInputStream(localFile); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { instream.close(); } catch (IOException e) { e.printStackTrace(); } try { outstream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 下载文件 * @param remeotFileName * @param downloadLocalFile 下载到本地的文件 * @throws SftpException * @throws IOException */ public void downloadFile(String remeotFileName, File downloadLocalFile) throws SftpException, IOException { String fullremoteDownloadFileName = this.downloadRemotePath + remeotFileName; this.downloadFile(downloadLocalFile, fullremoteDownloadFileName); } public void downloadFile(File downloadLocalFile, String fullremoteDownloadFileName) throws IOException, SftpException { OutputStream outstream = null; InputStream instream = null; try { instream = channel.get(fullremoteDownloadFileName); outstream = new FileOutputStream(downloadLocalFile); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); } catch (IOException e) { throw e; } catch (SftpException e) { throw e; } finally { try { if(instream!=null){ instream.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(outstream != null){ outstream.close(); } } catch (IOException e) { e.printStackTrace(); } } } public void uploadFile(String localPath,String localFileName) throws SftpException, IOException { this.uploadFile(localPath,localFileName, localFileName); } public void uploadFile(String localPath,String localFileName, String remoteFileName) throws SftpException, IOException { String fullLocalFileName = localPath + localFileName; String fullremoteFileName =this.uploadRemotePath + remoteFileName; uploadFile(new File(fullLocalFileName), fullremoteFileName); } public void disconnect() { session.disconnect(); channel.disconnect(); } public void createPath(String remotePath) { String[] paths = remotePath.split("/"); String currentPath; if (remotePath.startsWith("/")) { currentPath = "/"; } else { currentPath = ""; } for (String path : paths) { if ("".equals(path)) { continue; } currentPath += path + "/"; try { channel.mkdir(currentPath); } catch (SftpException e) { // e.printStackTrace(); // throw e; } } } public boolean isPath(String remotePath) { // 判断是否是文件夹 try { channel.cd(channel.getHome()); channel.cd(remotePath); channel.cd(channel.getHome()); return true; } catch (SftpException e1) { // e1.printStackTrace(); return false; } } public static void main(String[] args) throws IOException { // String ftpHost = "10.181.77.68"; // int ftpPort = 22; // String localPath = "D:\\temp\\"; // String remotePath = "usr/WebSphere/tep/"; // String userName = "wasadm"; // String password = "wasadm"; // // SFtpClient sftp = new SFtpClient(ftpHost, ftpPort, localPath, // remotePath, userName, password); // try { // sftp.connect(); // } catch (JSchException e) { // e.printStackTrace(); // } // try { // sftp.uploadFile("helloworld\\pom.xml"); // } catch (Exception e) { // e.printStackTrace(); // } // sftp.disconnect(); } }
sftp上传下载封装类
package com.bstek.transit.sftp; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.log4j.Logger; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.SftpException; public class SFtpTools { private final static Logger logger = Logger.getLogger(SFtpTools.class); private String ip ; //IP地址 private Integer port; //端口 private String username;//用户名 private String password;//密码 private String uploadRemotePath; //上传到服务器的路径 private String downloadRemotePath; //从服务器指定路径下载 public SFtpTools() { super(); } /** * * @param ip * @param port * @param username * @param password * @param uploadRemotePath * @param downloadRemotePath */ public SFtpTools(String ip, Integer port, String username,String password, String uploadRemotePath,String downloadRemotePath) { super(); this.ip = ip; this.port = port; this.username = username; this.password = password; this.uploadRemotePath = uploadRemotePath; this.downloadRemotePath = downloadRemotePath; } public void uploadFiles(File uploadFile) throws JSchException, IOException, SftpException { logger.info("connect to SFTP . ip:" + this.ip + "; port:" + this.port + ";uppath:" + this.uploadRemotePath + ";downpath:" + this.downloadRemotePath+ ";username:" + this.username + ";password:" + this.password); SFtpClient sFtpClient = new SFtpClient(ip, port, uploadRemotePath, downloadRemotePath,username, password); sFtpClient.connect(); // 上传文件 logger.info("sftp sending file....local file path = "+uploadFile.getPath()); sFtpClient.uploadFile(uploadFile); // 单台链接关闭 sFtpClient.disconnect(); } /** * 下载文件到指定的路径 * @param downloadFile * @param remeotFileName 要从服务器获取的文件名称 * @throws JSchException * @throws IOException * @throws SftpException */ public void downloadFiles(String remeotFileName, File downloadFile) throws JSchException, IOException, SftpException { logger.info("connect to SFTP . ip:" + this.ip + "; port:" + this.port + ";uppath:" + this.uploadRemotePath + ";downpath:" + this.downloadRemotePath+ ";username:" + this.username + ";password:" + this.password); SFtpClient sFtpClient = new SFtpClient(ip, port, uploadRemotePath, downloadRemotePath,username, password); sFtpClient.connect(); // 下载文件 logger.info("sftp receiving file....remote file name = "+remeotFileName); sFtpClient.downloadFile(remeotFileName,downloadFile); // 单台链接关闭 sFtpClient.disconnect(); } public static void main(String[] args) throws IOException { // SFtpUploadBat sfb = new SFtpUploadBat("10.181.77.68&10.181.68.236", "22&22", "D:\\temp\\", "tepppp/&teppp/", // "wasadm&wasadm", "wasadm&wasadm"); // try { // sfb.uploadFiles("helloworld\\"); // } catch (SftpException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (JSchException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } }
sftp上传下载调用
/** * 上传扣费文件到行方扣费系统 * @param uploadRemotePath 服务器文件路径 * @throws Exception */ public void uploadFeeFile2Core(String currDate) throws Exception { String fileName = FeeSupport.FEE_FILE_UPLOAD_PREFIX+currDate+FeeSupport.FEE_FILE_SUFFIX; //查询是否需要上传文件 String hql = "from SysFileHandle where fileName = ‘" + fileName+"‘ and fileType = ‘"+FeeSupport.FEE_FILE_TYPE_UPLOAD+"‘ and handleState != ‘" + FeeSupport.FEE_FILE_STATE_SUCC + "‘"; SysFileHandle fileHandle = this.fileHandleDao.getFileHandleByUnique(hql); if(fileHandle!=null){ // 上传 try { SFtpTools sfb = new SFtpTools(sftpProperty.getIp(), sftpProperty.getPort(),sftpProperty.getUsername(),sftpProperty.getPassword(),sftpProperty.getUploadRemotePath(),sftpProperty.getDownloadRemotePath()); sfb.uploadFiles(new File(sftpProperty.getUploadLocalPath(),fileHandle.getFileName())); } catch (Exception e) { fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_FAIL); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); throw e; } fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_SUCC); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); } }
public void downloadFeeFile4Core(String currDate) throws Exception { String fileName = FeeSupport.FEE_FILE_DOWNLOAD_PREFIX+currDate+FeeSupport.FEE_FILE_SUFFIX; //查询是否需要下载文件 String hql = "from SysFileHandle where fileName = ‘" + fileName+"‘ and fileType = ‘"+FeeSupport.FEE_FILE_TYPE_DOWNLOAD + "‘"; SysFileHandle fileHandle = this.fileHandleDao.getFileHandleByUnique(hql); if(fileHandle != null && currDate.equals(fileHandle.getCreateDate())){ return ; } if(fileHandle == null){ fileHandle = new SysFileHandle(); fileHandle.setFileName(fileName); fileHandle.setFileType(FeeSupport.FEE_FILE_TYPE_DOWNLOAD ); } this.downloadFeeFile4Core(fileHandle,currDate,fileName); } private void downloadFeeFile4Core( SysFileHandle fileHandle,String currDate,String fileName) throws Exception { //需要下载 try { SFtpTools sfb = new SFtpTools(sftpProperty.getIp(), sftpProperty.getPort(),sftpProperty.getUsername(),sftpProperty.getPassword(),sftpProperty.getUploadRemotePath(),sftpProperty.getDownloadRemotePath()); sfb.downloadFiles(fileName,new File(sftpProperty.getDownloadLocalPath(),fileName)); } catch (Exception e) { // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); throw e; } fileHandle.setHandleState(FeeSupport.FEE_FILE_STATE_NO); fileHandle.setCreateDate(currDate); // 更新记录状态 this.fileHandleDao.updateFileHandle(fileHandle); }
以上是关于Java Sftp上传下载文件的主要内容,如果未能解决你的问题,请参考以下文章