zoukankan      html  css  js  c++  java
  • ftp上传

    package com.br.sftpclient;

    import com.br.sftpUtil.PropertiesUtil;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    import sun.rmi.runtime.Log;

    import java.io.*;
    import java.net.MalformedURLException;
    import java.util.logging.Logger;

    /**
    * @Company:
    * @Author: shaobin.fu
    * @Date: 2018/12/11 14:27
    * @Description:
    */
    public class UpToFtp2 {
    private transient org.slf4j.Logger log = LoggerFactory.getLogger(this.getClass());

    private FTPClient ftp;

    /**
    * @param path 上传到ftp服务器哪个路径下
    * @param addr 地址
    * @param port 端口号
    * @param username 用户名
    * @param password 密码
    * @return
    * @throws Exception
    */
    public boolean connect(String path, String addr, int port, String username, String password) throws Exception {
    boolean result = false;
    log.info("start connect.....");
    ftp = new FTPClient();
    int reply;
    ftp.connect(addr, port);
    ftp.login(username, password);
    ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    return result;
    }
    log.info("ftp has been connected.....");
    CreateDirecroty(path);
    ftp.changeWorkingDirectory(path);
    result = true;
    return result;
    }
    //改变目录路径
    public boolean changeWorkingDirectory(String directory) {
    boolean flag = true;
    try {
    flag = ftp.changeWorkingDirectory(directory);
    if (flag) {
    log.info("enter " + directory + " success!");

    } else {
    log.info("enter " + directory + " failed!start create directory!");
    }
    } catch (IOException ioe) {
    ioe.printStackTrace();
    }
    return flag;
    }
    //判断ftp服务器文件是否存在
    public boolean existFile(String path) throws IOException {
    boolean flag = false;
    FTPFile[] ftpFileArr = ftp.listFiles(path);
    if (ftpFileArr.length > 0) {
    flag = true;
    }
    return flag;
    }
    //创建目录
    public boolean makeDirectory(String dir) {
    boolean flag = true;
    try {
    flag = ftp.makeDirectory(dir);
    if (flag) {
    log.info("create directory " + dir + " success!");

    } else {
    log.info("create directory " + dir + " failed!");
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return flag;
    }
    //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
    public boolean CreateDirecroty(String remote) throws IOException {
    boolean success = true;
    String directory = remote + "/";
    // 如果远程目录不存在,则递归创建远程服务器目录
    if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
    int start = 0;
    int end = 0;
    if (directory.startsWith("/")) {
    start = 1;
    } else {
    start = 0;
    }
    end = directory.indexOf("/", start);
    String path = "";
    String paths = "";
    while (true) {
    String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
    path = path + "/" + subDirectory;
    if (!existFile(path)) {
    if (makeDirectory(subDirectory)) {
    changeWorkingDirectory(subDirectory);
    } else {
    log.info("create directory " + subDirectory + " failed!");
    changeWorkingDirectory(subDirectory);
    }
    } else {
    changeWorkingDirectory(subDirectory);
    }

    paths = paths + "/" + subDirectory;
    start = end + 1;
    end = directory.indexOf("/", start);
    // 检查所有目录是否创建完毕
    if (end <= start) {
    break;
    }
    }
    }
    return success;
    }

    /**
    * @param file 上传的文件或文件夹
    * @throws Exception
    */
    public void upload(File file) throws Exception {
    log.info("start upload,please waiting....");
    if (file.isDirectory()) {
    log.info("start upload,start upload directory....");
    //ftp.makeDirectory(file.getName());
    CreateDirecroty(file.getName());
    ftp.changeWorkingDirectory(file.getName());
    log.info("current pathname is:{}",file.getPath());
    String[] files = file.list();
    for (int i = 0; i < files.length; i++) {
    log.info("file path:{}",file.getPath());
    File file1 = new File(file.getPath() + "\" + files[i]);
    if (file1.isDirectory()) {
    upload(file1);
    ftp.changeToParentDirectory();
    } else {
    File file2 = new File(file.getPath() + "\" + files[i]);
    FileInputStream input = new FileInputStream(file2);
    ftp.storeFile(file2.getName(), input);
    input.close();
    }
    }
    } else {
    log.info("start upload,start upload file,wait a minute....");
    File file2 = new File(file.getPath());
    FileInputStream input = new FileInputStream(file2);
    ftp.storeFile(file2.getName(), input);
    input.close();
    }
    }

    public static void main(String[] args) throws Exception {
    UpToFtp2 t = new UpToFtp2();
    t.connect("/huadong_fengkong/dir-name/", PropertiesUtil.getStringValue("hostname"), PropertiesUtil.getIntegerValue("port"),
    PropertiesUtil.getStringValue("username"), PropertiesUtil.getStringValue("password"));
    //String pathname = !StringUtils.isEmpty(args[0])?args[0]:PropertiesUtil.getStringValue("txt_path");
    String pathname="E:\opt\SpringCloud";
    File file = new File(pathname);
    t.upload(file);
    }
    }
  • 相关阅读:
    Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
    集装箱set相关算法
    企业视觉-大型电商(制)-高性能的用户视觉性能(1)
    周期节
    在近排博客活动已被删除几篇文章
    [Python] Different ways to test multiple flags at once in Python
    [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
    [Javascirpt AST] Babel Plugin -- create new CallExpression
    [Python] Object spread operator in Python
    [Javascript AST] 3. Continue: Write ESLint rule
  • 原文地址:https://www.cnblogs.com/tiger-fu/p/10119503.html
Copyright © 2011-2022 走看看