java SSH2Ftp 上传 下载 多个文件

来源:互联网 发布:交大慧谷 seo 编辑:程序博客网 时间:2024/05/21 21:43

这几天想写个上传下载的java工具,在网上找了半天都不太好用。

自己整了个小代码,可以上传下载多个文件。路径用“\\”指定。

需要jsch-0.1.8.jar


package jp.co.nri.kinshasa.util;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.Vector;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.jcraft.jsch.UserInfo;

public class Ssh2Util {
    private static ArrayList filelist;

    private String host;

    private String user;

    private String password;

    private int port;

    private Session session;

    private File[] listFiles;

    public Ssh2Util(String host, String user, String password, int port) {
        this.host = host;
        this.user = user;
        this.password = password;
        this.port = port;
    }

    public void initialSession() throws Exception {
        if (session == null) {
            JSch jsch = new JSch();
            session = jsch.getSession(user, host, port);
            session.setUserInfo(new UserInfo() {

                public String getPassphrase() {
                    return null;
                }

                public String getPassword() {
                    return null;
                }

                public boolean promptPassword(String arg0) {
                    return false;
                }

                public boolean promptPassphrase(String arg0) {
                    return false;
                }

                public boolean promptYesNo(String arg0) {
                    return true;
                }

                public void showMessage(String arg0) {
                }

            });
            session.setPassword(password);
            session.connect();
        }
    }

    /**
     * 关闭连接
     *
     * @throws Exception
     */
    public void close() throws Exception {
        if (session != null && session.isConnected()) {
            session.disconnect();
            session = null;
        }
    }


    public void putFile2(String localPath, String localFile, String remotePath,ChannelSftp c)
    throws Exception {
        c.put(localPath+"\\"+localFile, remotePath);
    }
    public void download(String directory, String downloadFile,
            String saveFile, ChannelSftp sftp) {
        try {
            sftp.cd(directory);
            File file = new File(saveFile);
            sftp.get(downloadFile, new FileOutputStream(file));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void getFile(String directory, String downloadFile, String saveFile,
            ChannelSftp sftp) throws SftpException {
        sftp.get(directory + "/" + downloadFile, saveFile);

    }

    public void dirPath(String directory, String downloadFile, String saveFile,
            ChannelSftp sftp) throws SftpException {
        Vector v = sftp.ls(directory);
        
        for (Iterator iterator = v.iterator(); iterator.hasNext();) {
            Object object = (Object) iterator.next();
            System.out.println(isDirectoryName(object.toString()));
            System.out.println(getLastTokenName(object.toString()));
            
        }

    }
    
    public String getLastTokenName(String str) throws SftpException {
        String directoryName=null;
//        ArrayList tokenList=new ArrayList();
        
        StringTokenizer st=new StringTokenizer(str," ");
        while(st.hasMoreTokens()){
//            System.out.println(st.nextToken());
            directoryName=st.nextToken();
//            tokenList.add(st.nextToken());
        }
        
        return directoryName ;
    }
    
    
    
    public boolean isDirectoryName(String str) throws SftpException {
        if(str.startsWith("d")){
            return true;
        }
        return false;
    }

    
    public void downloadFiles(String remoteDirectory, String localDirectory ) throws Exception{
        initialSession();
        Channel channelSftp = getSession().openChannel("sftp");
        channelSftp.connect();
        ChannelSftp sftp= (ChannelSftp) channelSftp;
        Vector v = sftp.ls(remoteDirectory);
        String str;
        for (Iterator iterator = v.iterator(); iterator.hasNext();) {
            Object object = (Object) iterator.next();
            str=getLastTokenName(object.toString());
            
            if((!str.equals("."))&&(!str.equals(".."))){
                
                if(isDirectoryName(object.toString())){
                    File file=new File(localDirectory+"/"+str);
                    file.mkdir();
                    downloadFiles(remoteDirectory+"/"+str,localDirectory+"/"+str);                    
                }else{
                    getFile(remoteDirectory, str, localDirectory, sftp);
                    System.out.println(object.toString());
                }
            }
        }
        channelSftp.disconnect();
    }
    
   
    public void uploadFiles2( String localDirectory ,String remoteDirectory) throws Exception{
        initialSession();
        Channel channelSftp = getSession().openChannel("sftp");
        channelSftp.connect();
        ChannelSftp sftp= (ChannelSftp) channelSftp;
        
        File file=new File(localDirectory);
        listFiles = file.listFiles();
        for (File f : listFiles) {
            
            System.out.println(f.getName());
            
            if(f.isDirectory()){
                uploadFiles2(localDirectory+"\\"+f.getName() , remoteDirectory+"/"+f.getName());
            }else{
                putFile2(localDirectory,f.getName(), remoteDirectory,sftp);
            }
            
        }
        
        channelSftp.disconnect();
    }


    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

}


原创粉丝点击