JAVA FTP上传文件

1、下载相应的jar包

 commons-net-3.1.jar

2、实现代码如下:
强调内容在配置文件中config.properties加port、ip、username、password

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class UploadWorkOrderFile {

  /**
   * 日志记录
   */
  private final Logger logger = LoggerFactory.getLogger(UploadWorkOrderFile.class);
  private static UploadWorkOrderFile ftpUtils;
  private FTPClient ftpClient;
  // ip地址
  private String ip;
  // 服务器端口
  private String port;
  // 用户登录名
  private String username;
  // 用户登录密码
  private String password;
  // 文件下载输入流
  private InputStream is;


  /** 
   * 私有构造方法 
   */
  private UploadWorkOrderFile() {
    initConfig();
    if (null == ftpClient) {
      ftpClient = new FTPClient();
    }
  }

  /**
   * @title getInstance
   * @Description: 获取FTPUtils对象实例
   * @return FTPUtils对象实例
   */
  public synchronized static UploadWorkOrderFile getInstance() {
    if (null == ftpUtils) {
      ftpUtils = new UploadWorkOrderFile();
    }
    return ftpUtils;
  }

  /**
   * @title initConfig
   * @Description: 初始化FTP服务器连接属性
   */
  public void initConfig() {
    // 构造Properties对象
    Properties properties = new Properties();
    // 定义配置文件输入流
    InputStream is = null;
    try {
      // 获取配置文件输入流
      is = UploadWorkOrderFile.class.getResourceAsStream("/config.properties");
      // 加载配置文件
      properties.load(is);
      // 读取配置文件
      port = (String) properties.get("port");
      // 设置用户名
      username = (String) properties.get("username");
      // 设置密码
      password = (String) properties.get("password");
      ip = (String) properties.get("ip");
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      // 判断输入流是否为空
      if (null != is) {
        try {
          // 关闭输入流
          is.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

  /**
   * @title connectToTheServer
   * @Description: 连接(配置通用连接属性)至服务器 
   * @return boolean
   */
  public boolean connectToTheServer() {
    // 定义返回值
    boolean result = false;
    try {
      // 连接至服务器,端口默认为21时,可直接通过URL连接
      ftpClient.connect(ip, Integer.parseInt(port));
      // 登录服务器
      ftpClient.login(username, password);
      // 判断返回码是否合法
      if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
        // 不合法时断开连接
        ftpClient.disconnect();
        // 结束程序
        return result;
      }
      // 设置文件操作目录(即上传文件存放的文件夹)
      result = ftpClient.changeWorkingDirectory(Constants.ALARM_FORWARD_UPLOAD);
      // 设置文件类型,二进制
      result = ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
      // 设置缓冲区大小
      ftpClient.setBufferSize(3072);//3072
      // 设置字符编码
      //ftpClient.setControlEncoding("UTF-8");
    } catch (IOException e) {
      logger.error("转工单上传文件连接服务器失败:{}", e);
    }
    return result;
  }

  /** 
   * @title storeFile
   * @Description:上传文件至FTP服务器 
   * @param storePath 上传文件存储路径(ip)
   * @param fileName 上传文件存储名称 
   * @param is 上传文件输入流 
   * @return boolean
   */
  public boolean storeFile(String fileName, InputStream is) {

    boolean result = false;
    try {
      // 连接至服务器
      result = connectToTheServer();
      // 判断服务器是否连接成功           
      if (result) {      
        // 上传文件
        ftpClient.enterLocalPassiveMode();
       result = ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), is);

      }
      // 关闭输入流
      is.close();
    } catch (IOException e) {
      logger.error("转工单上传文件失败:{}", e);
    } finally {
      // 判断输入流是否存在
      if (null != is) {
        try {
          // 关闭输入流
          is.close();
        } catch (IOException e) {
          logger.error("转工单上传文件关闭输入流失败:{}", e);
        }
      }
      // 登出服务器并断开连接
      ftpUtils.logout();
    }
    //System.out.println(result);
    return result;
  }

  /**   
   * @Description:登出服务器并断开连接
   * @return boolean
   */
  public boolean logout() {
    boolean result = false;
    if (null != is) {
      try {
        // 关闭输入流
        is.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    if (null != ftpClient) {
      try {
        // 登出服务器
        result = ftpClient.logout();
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        // 判断连接是否存在
        if (ftpClient.isConnected()) {
          try {
            // 断开连接
            ftpClient.disconnect();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    }
    return result;
  }
}

3、调用如下:
filePathAndName 文件的绝对路径
buffer 文件名称

InputStream in = new FileInputStream(new File(filePathAndName));
boolean result = UploadWorkOrderFile.getInstance().storeFile(buffer.toString(), in);

若result为true则上传成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值