sftp

    技术2022-07-01  70

    package net.xwolf.ultility;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.LineNumberReader;import java.util.ArrayList;import java.util.List;import java.util.Properties;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException; public class FtpImpl{        private String host = "127.0.0.1";    private String username="MingMac";    private String password="×××";    private int port = 22;    private ChannelSftp sftp = null;    private String localPath = "/Users/MingMac/Documents";    private String remotePath = "/Users/MingMac/MyDocuments";    private String fileListPath = "/Users/MingMac/Documents/Java/workspace/MyTools/conf/file.txt";    private final String seperator = "/";        /**     * connect server via sftp     */    public void connect() {        try {            if(sftp != null){                System.out.println("sftp is not null");            }            JSch jsch = new JSch();            jsch.getSession(username, host, port);            Session sshSession = jsch.getSession(username, host, port);            System.out.println("Session created.");            sshSession.setPassword(password);            Properties sshConfig = new Properties();            sshConfig.put("StrictHostKeyChecking", "no");            sshSession.setConfig(sshConfig);            sshSession.connect();            System.out.println("Session connected.");            System.out.println("Opening Channel.");            Channel channel = sshSession.openChannel("sftp");            channel.connect();            sftp = (ChannelSftp) channel;            System.out.println("Connected to " + host + ".");        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * Disconnect with server     */    public void disconnect() {        if(this.sftp != null){            if(this.sftp.isConnected()){                this.sftp.disconnect();            }else if(this.sftp.isClosed()){                System.out.println("sftp is closed already");            }        }    }    public void download() {        // TODO Auto-generated method stub            }            private 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();        }    }        /**     * upload all the files to the server     */    public void upload() {        List<String> fileList = this.getFileEntryList(fileListPath);        try {            if(fileList != null){                for (String filepath : fileList) {                    String localFile = this.localPath + this.seperator+ filepath;                    File file = new File(localFile);                                        if(file.isFile()){                        System.out.println("localFile : " + file.getAbsolutePath());                        String remoteFile = this.remotePath + this.seperator + filepath;                        System.out.println("remotePath:" + remoteFile);                        File rfile = new File(remoteFile);                        String rpath = rfile.getParent();                        try {                            createDir(rpath, sftp);                        } catch (Exception e) {                            System.out.println("*******create path failed" + rpath);                        }                        this.sftp.put(new FileInputStream(file), file.getName());                        System.out.println("=========upload down for " + localFile);                    }                }            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SftpException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }    /**     * create Directory     * @param filepath     * @param sftp     */    private void createDir(String filepath, ChannelSftp sftp){        boolean bcreated = false;        boolean bparent = false;        File file = new File(filepath);        String ppath = file.getParent();        try {            this.sftp.cd(ppath);            bparent = true;        } catch (SftpException e1) {            bparent = false;        }        try {            if(bparent){                try {                    this.sftp.cd(filepath);                    bcreated = true;                } catch (Exception e) {                    bcreated = false;                }                if(!bcreated){                    this.sftp.mkdir(filepath);                    bcreated = true;                }                return;            }else{                createDir(ppath,sftp);                this.sftp.cd(ppath);                this.sftp.mkdir(filepath);            }        } catch (SftpException e) {            System.out.println("mkdir failed :" + filepath);            e.printStackTrace();        }                try {            this.sftp.cd(filepath);        } catch (SftpException e) {            e.printStackTrace();            System.out.println("can not cd into :" + filepath);        }            }    /**     * get all the files need to be upload or download     * @param file     * @return     */    private List<String> getFileEntryList(String file){        ArrayList<String> fileList = new ArrayList<String>();        InputStream in = null;        try {                        in = new FileInputStream(file);            InputStreamReader inreader = new InputStreamReader(in);                        LineNumberReader linreader = new LineNumberReader(inreader);            String filepath = linreader.readLine();            while(filepath != null){                fileList.add(filepath);                filepath = linreader.readLine();            }            in.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            if(in != null){                in = null;            }        }        return fileList;    }    /**     * @return the host     */    public String getHost() {        return host;    }    /**     * @param host the host to set     */    public void setHost(String host) {        this.host = host;    }    /**     * @return the username     */    public String getUsername() {        return username;    }    /**     * @param username the username to set     */    public void setUsername(String username) {        this.username = username;    }    /**     * @return the password     */    public String getPassword() {        return password;    }    /**     * @param password the password to set     */    public void setPassword(String password) {        this.password = password;    }    /**     * @return the port     */    public int getPort() {        return port;    }    /**     * @param port the port to set     */    public void setPort(int port) {        this.port = port;    }    /**     * @return the sftp     */    public ChannelSftp getSftp() {        return sftp;    }    /**     * @param sftp the sftp to set     */    public void setSftp(ChannelSftp sftp) {        this.sftp = sftp;    }    /**     * @return the localPath     */    public String getLocalPath() {        return localPath;    }    /**     * @param localPath the localPath to set     */    public void setLocalPath(String localPath) {        this.localPath = localPath;    }    /**     * @return the remotePath     */    public String getRemotePath() {        return remotePath;    }    /**     * @param remotePath the remotePath to set     */    public void setRemotePath(String remotePath) {        this.remotePath = remotePath;    }    /**     * @return the fileListPath     */    public String getFileListPath() {        return fileListPath;    }    /**     * @param fileListPath the fileListPath to set     */    public void setFileListPath(String fileListPath) {        this.fileListPath = fileListPath;    }        public static void main(String[] args) {        // TODO Auto-generated method stub        FtpImpl ftp= new FtpImpl();        ftp.connect();        ftp.upload();        ftp.disconnect();        System.exit(0);    }}


    最新回复(0)