ftp上传下载

  1 package com.mall.business.active;
  2 
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.io.OutputStream;
  9 import java.text.SimpleDateFormat;
 10 import java.util.Date;
 11 import java.util.Properties;
 12 import java.util.Vector;
 13 
 14 import org.apache.log4j.LogManager;
 15 import org.apache.log4j.Logger;
 16 
 17 import com.jcraft.jsch.Channel;
 18 import com.jcraft.jsch.ChannelSftp;
 19 import com.jcraft.jsch.JSch;
 20 import com.jcraft.jsch.JSchException;
 21 import com.jcraft.jsch.Session;
 22 import com.jcraft.jsch.SftpException;
 23 import com.mall.timer.TimerManager;
 24 
 25 public class SshSftp {
 26     /**
 27      * 利用JSch包实现SFTP下载、上传文件
 28      * @param ip
 29      *            主机IP
 30      * @param user
 31      *            主机登陆用户名
 32      * @param psw
 33      *            主机登陆密码
 34      * @param port
 35      *            主机ssh2登陆端口
 36      * @param url
 37      *            保存位置
 38      * @param imgUrl
 39      *            保存位置(域名)
 40      * @param localpath
 41      *            本地文件位置
 42      * @param newname
 43      *            新文件名         
 44      */
 45     private static Logger log=LogManager.getLogger(SshSftp.class);
 46     
 47     public static String sshSftp(String ip, String user, String psw, int port,
 48             String url, String imgUrl, String localpath, String newname) {
 49         Session session = null;
 50         Channel channel = null;
 51         ChannelSftp sftp = null;
 52        
 53         JSch jsch = new JSch();
 54         try {
 55             if (port <= 0) {
 56                 // 连接服务器,采用默认端口-1
 57                 session = jsch.getSession(user, ip);
 58             } else {
 59                 // 采用指定的端口连接服务器
 60                 session = jsch.getSession(user, ip, port);
 61             }
 62 
 63             // 如果服务器连接不上,则抛出异常
 64             if (session == null) {
 65                 log.info("未连接服务器:session is null");
 66                 return null;
 67                 //throw new Exception("session is null");
 68             }
 69             
 70             // 设置登陆主机的密码
 71             session.setPassword(psw);// 设置密码
 72             // 设置第一次登陆的时候提示,可选值:(ask | yes | no)
 73             session.setConfig("StrictHostKeyChecking", "no");
 74             // 设置登陆超时时间
 75             session.connect(30000);
 76 
 77             // 创建sftp通信通道
 78             channel = (Channel) session.openChannel("sftp");
 79             channel.connect(10000);
 80             sftp = (ChannelSftp) channel;
 81         }catch(Exception e){
 82             log.info("未连接服务器"+e.getMessage());
 83             return null;
 84         }    
 85 
 86         try {
 87             sftp.ls(url); // 首先查看下目录,如果不存在,系统会被错,捕获这个错,生成新的目录。
 88         } catch (Exception e) {
 89             try {
 90                 sftp.mkdir(url);
 91             } catch (SftpException e1) {
 92                 log.info("创建文件夹异常,msg:"+e1.getMessage());
 93                 return null;
 94             }
 95         }
 96         
 97         Date date = new Date();
 98         SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
 99         try {
100             sftp.ls(url+"/"+format.format(date)); // 首先查看下目录,如果不存在,系统会被错,捕获这个错,生成新的目录。
101         } catch (Exception e) {
102             try {
103                 sftp.mkdir(url+"/"+format.format(date));
104             } catch (SftpException e1) {
105                 log.info("创建文件夹异常,msg:"+e1.getMessage());
106                 return null;
107             }
108         }
109 
110         try{
111             // 进入服务器指定的文件夹
112             sftp.cd(url+"/"+format.format(date));
113 
114             // 列出服务器指定的文件列表
115             /*
116              * Vector v = sftp.ls("*.jsp"); for(int i=0;i<v.size();i++){
117              * System.out.println(v.get(i)); }
118             */
119 
120             // 以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
121             OutputStream outstream = sftp.put(newname);
122             // InputStream instream = new FileInputStream(new
123             // File("H:/downloadFile/1223.jpg"));
124             InputStream instream = new FileInputStream(new File(localpath));
125 
126             byte b[] = new byte[1024];
127             int n;
128             while ((n = instream.read(b)) != -1) {
129                 outstream.write(b, 0, n);
130             }
131 
132             outstream.flush();
133             outstream.close();
134             instream.close();
135             
136             return imgUrl+format.format(date)+"/"+newname;
137         }catch (Exception e) {
138             e.printStackTrace();
139             return null;
140         } finally {
141             session.disconnect();
142             channel.disconnect();
143         }
144     }
145 
146     public static void main(String[] args) {
147         String ip = "***";
148         String user = "**";
149         String psw = "**";
150         int port = 22;
151         String url = "**";
152         String imgUrl = "***";
153         String localpath = "H:/downloadFile/接口测试文档.doc";
154         String newname = "aaa.doc";
155 
156         SshSftp sftp = new SshSftp();
157         sftp.sshSftp(ip,user,psw,port,url,imgUrl,localpath,newname);
158 
159     }
160 
161 }
原文地址:https://www.cnblogs.com/lixin890808/p/3904873.html