• SftpUtil FTP文件上传


    package ftputil;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Properties;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    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 SftpUtil {
    // private static final Logger LOGGER =
    // LoggerFactory.getLogger(SftpUtil.class);

    public static void upload(String host, int port, String username, String password, InputStream inputStream,
    String remoteDirectory, String remoteFileName) throws Exception {
    Sftp sftp = new Sftp();
    sftp.getConnect(host, port, username, password);
    sftp.upload(inputStream, remoteDirectory, remoteFileName);
    sftp.disconnect();
    }

    public static void upload(String host, int port, String username, String password, String localFilePathName,
    String remoteDirectory, String remoteFileName) throws Exception {
    Sftp sftp = new Sftp();
    sftp.getConnect(host, port, username, password);
    File file = new File(localFilePathName);
    sftp.upload(new FileInputStream(file), remoteDirectory, remoteFileName);
    sftp.disconnect();
    }

    public static void uploadBatch(String host, int port, String username, String password,
    List<String> localFilePathNameList, List<String> remoteDirectoryList, List<String> remoteFileNameList)
    throws Exception {
    if ((localFilePathNameList.size() != remoteDirectoryList.size())
    || (localFilePathNameList.size() != remoteFileNameList.size())) {
    throw new RuntimeException("参数错误!本地文件list 和 远端目录list 以及 远端文件名 list 大小不一致。");
    }

    Sftp sftp = new Sftp();
    sftp.getConnect(host, port, username, password);

    for (int i = 0; i < localFilePathNameList.size(); ++i) {
    String localFilePathName = (String) localFilePathNameList.get(i);
    String remoteDirectory = (String) remoteDirectoryList.get(i);
    String remoteFileName = (String) remoteFileNameList.get(i);
    File file = new File(localFilePathName);
    sftp.upload(new FileInputStream(file), remoteDirectory, remoteFileName);
    }

    sftp.disconnect();
    }

    public static void download(String host, int port, String username, String password, String remoteDirectory,
    String remoteFileName, String localDirectorys, String localFileName) throws Exception {
    Sftp sftp = new Sftp();
    sftp.getConnect(host, port, username, password);
    sftp.download(remoteDirectory, remoteFileName, localDirectorys, localFileName);
    sftp.disconnect();
    }

    public static void delete(String host, int port, String username, String password, String remoteDirectory,
    String remoteFileName) throws Exception {
    Sftp sftp = new Sftp();
    sftp.getConnect(host, port, username, password);
    sftp.delete(remoteDirectory, remoteFileName);
    sftp.disconnect();
    }

    public static void main(String[] args) throws Exception {
    test();
    }

    private static void test() throws Exception {
    long b = System.currentTimeMillis();

    String host = "172.16.10.208";
    short port = 22;
    String username = "ftpuser";
    String password = "123456";

    String localFilePathName = "C:/Users/Administrator/Desktop/新建文本文档 (5).txt";

    String remoteDirectory = "/home/test/";
    String remoteFileName = "remoteFile_1.txt";
    String localDirectorys = "C:/Users/Administrator/Desktop/";
    String localFileName = "localFile_1.txt";

    // upload(host, port, username, password, localFilePathName,
    // remoteDirectory, remoteFileName);

    download(host, port, username, password, remoteDirectory, remoteFileName, localDirectorys, localFileName);

    long e = System.currentTimeMillis();

    System.err.println("总耗时:" + (e - b) / 1000.0D + "秒");
    }

    private static class Sftp {
    private static final Logger LOGGER = LoggerFactory.getLogger(Sftp.class);
    private Session session;
    private Channel channel;
    private ChannelSftp sftp;

    private Sftp() {
    this.session = null;
    this.channel = null;
    this.sftp = null;
    }

    private void getConnect(String host, int port, String username, String password) throws Exception {
    LOGGER.debug("开始创建sftp连接...");
    JSch jsch = new JSch();
    this.session = jsch.getSession(username, host, port);
    this.session.setPassword(password);
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    this.session.setConfig(config);

    this.session.connect();

    this.channel = this.session.openChannel("sftp");

    this.channel.connect();

    this.sftp = ((ChannelSftp) this.channel);

    LOGGER.debug("创建sftp连接结束...");
    }

    private void upload(InputStream inputStream, String remoteDirectory, String remoteFileName) throws Exception {
    this.sftp.cd("/");
    try {
    if ((!remoteDirectory.equals("")) && (remoteDirectory.trim() != "")) {
    String[] dd = remoteDirectory.split("/");
    for (String directory : dd) {
    if (directory == null)
    continue;
    if ("".equals(directory.trim()))
    continue;
    try {
    this.sftp.cd(directory);
    } catch (SftpException sException) {
    if (2 == sException.id) {
    LOGGER.info("创建目录【{}】", new Object[] { directory });
    this.sftp.mkdir(directory);
    this.sftp.cd(directory);
    }
    }
    }
    }
    this.sftp.put(inputStream, remoteFileName);
    } catch (Exception e) {
    throw new Exception(e.getMessage(), e);
    }
    }

    private void download(String remoteDirectory, String remoteFileName, String localDirectorys,
    String localFileName) throws Exception {
    try {
    this.sftp.cd(remoteDirectory);
    File file = new File(localDirectorys);
    if (!file.exists()) {
    file.mkdirs();
    }
    this.sftp.get(remoteFileName, new FileOutputStream(new File(localDirectorys, localFileName)));
    } catch (Exception e) {
    } finally {
    disconnect();
    }
    }

    private void delete(String directory, String deleteFile) throws Exception {
    try {
    this.sftp.cd(directory);
    this.sftp.rm(deleteFile);
    } catch (Exception e) {
    } finally {
    disconnect();
    }
    }

    private void disconnect() throws Exception {
    if (this.sftp != null) {
    this.sftp.disconnect();
    this.sftp.exit();
    this.sftp = null;
    }
    if (this.channel != null) {
    this.channel.disconnect();
    this.channel = null;
    }
    if (this.session != null) {
    this.session.disconnect();
    this.session = null;
    }
    }
    }
    }

  • 相关阅读:
    【C++】对象模型之Function
    linux扩展磁盘
    swift文件操作
    WEEK丢人周
    swift upload
    桌面管理器
    linux 撤销软件卸载
    声明Complex类,成员变量包括实部和虚部,成员方法包括实现由字符串构造复数、复数加法、减法,字符串描述、比较相等等操作
    eclipse踩坑
    QQ语音消息提取 amr文件解密
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10304247.html
Copyright © 2020-2023  润新知