欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java通过FTP服务器上传下载文件的方法

程序员文章站 2024-03-05 19:50:13
对于使用文件进行交换数据的应用来说,使用ftp 服务器是一个很不错的解决方案。 关于filezilla server服务器的详细搭建配置过程,详情请见filezilla...

对于使用文件进行交换数据的应用来说,使用ftp 服务器是一个很不错的解决方案。

关于filezilla server服务器的详细搭建配置过程,详情请见filezilla server安装配置教程。之前有朋友说,上传大文件(几百m以上的文件)到ftp服务器时会重现无法重命名的问题,但本人亲测上传2g的文件到filezilla server都没有该问题,朋友们可以放心使用该代码。

favftputil.java

package com.favccxx.favsoft.util;
 
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputstream;
 
import org.apache.commons.net.ftp.ftpclient;
import org.apache.commons.net.ftp.ftpfile;
import org.apache.commons.net.ftp.ftpreply;
 
public class favftputil {
   
  /**
   * 上传文件(可供action/controller层使用)
   * @param hostname ftp服务器地址
   * @param port  ftp服务器端口号
   * @param username  ftp登录帐号
   * @param password  ftp登录密码
   * @param pathname  ftp服务器保存目录
   * @param filename  上传到ftp服务器后的文件名称
   * @param inputstream 输入文件流
   * @return
   */
  public static boolean uploadfile(string hostname, int port, string username, string password, string pathname, string filename, inputstream inputstream){
    boolean flag = false;
    ftpclient ftpclient = new ftpclient();
    ftpclient.setcontrolencoding("utf-8");
    try {
      //连接ftp服务器
      ftpclient.connect(hostname, port);
      //登录ftp服务器
      ftpclient.login(username, password);
      //是否成功登录ftp服务器
      int replycode = ftpclient.getreplycode();
      if(!ftpreply.ispositivecompletion(replycode)){
        return flag;
      }
       
      ftpclient.setfiletype(ftpclient.binary_file_type);
      ftpclient.makedirectory(pathname);
      ftpclient.changeworkingdirectory(pathname);
      ftpclient.storefile(filename, inputstream);
      inputstream.close();
      ftpclient.logout();
      flag = true;
    } catch (exception e) {
      e.printstacktrace();
    } finally{
      if(ftpclient.isconnected()){
        try {
          ftpclient.disconnect();
        } catch (ioexception e) {
          e.printstacktrace();
        }
      }
    }
    return flag;
  }
   
   
  /**
   * 上传文件(可对文件进行重命名)
   * @param hostname ftp服务器地址
   * @param port  ftp服务器端口号
   * @param username  ftp登录帐号
   * @param password  ftp登录密码
   * @param pathname  ftp服务器保存目录
   * @param filename  上传到ftp服务器后的文件名称
   * @param originfilename 待上传文件的名称(绝对地址)
   * @return
   */
  public static boolean uploadfilefromproduction(string hostname, int port, string username, string password, string pathname, string filename, string originfilename){
    boolean flag = false;
    try {
      inputstream inputstream = new fileinputstream(new file(originfilename));
      flag = uploadfile(hostname, port, username, password, pathname, filename, inputstream);
    } catch (exception e) {
      e.printstacktrace();
    }
    return flag;
  }
   
  /**
   * 上传文件(不可以进行文件的重命名操作)
   * @param hostname ftp服务器地址
   * @param port  ftp服务器端口号
   * @param username  ftp登录帐号
   * @param password  ftp登录密码
   * @param pathname  ftp服务器保存目录
   * @param originfilename 待上传文件的名称(绝对地址)
   * @return
   */
  public static boolean uploadfilefromproduction(string hostname, int port, string username, string password, string pathname, string originfilename){
    boolean flag = false;
    try {
      string filename = new file(originfilename).getname();
      inputstream inputstream = new fileinputstream(new file(originfilename));
      flag = uploadfile(hostname, port, username, password, pathname, filename, inputstream);
    } catch (exception e) {
      e.printstacktrace();
    }
    return flag;
  }
   
   
  /**
   * 删除文件
   * @param hostname ftp服务器地址
   * @param port  ftp服务器端口号
   * @param username  ftp登录帐号
   * @param password  ftp登录密码
   * @param pathname  ftp服务器保存目录
   * @param filename  要删除的文件名称
   * @return
   */
  public static boolean deletefile(string hostname, int port, string username, string password, string pathname, string filename){
    boolean flag = false;
    ftpclient ftpclient = new ftpclient();
    try {
      //连接ftp服务器
      ftpclient.connect(hostname, port);
      //登录ftp服务器
      ftpclient.login(username, password);
      //验证ftp服务器是否登录成功
      int replycode = ftpclient.getreplycode();
      if(!ftpreply.ispositivecompletion(replycode)){
        return flag;
      }
      //切换ftp目录
      ftpclient.changeworkingdirectory(pathname);
      ftpclient.dele(filename);
      ftpclient.logout();
      flag = true;
    } catch (exception e) {
      e.printstacktrace();
    } finally{
      if(ftpclient.isconnected()){
        try {
          ftpclient.logout();
        } catch (ioexception e) {
         
        }
      }
    }
    return flag;
  }
   
  /**
   * 下载文件
   * @param hostname ftp服务器地址
   * @param port  ftp服务器端口号
   * @param username  ftp登录帐号
   * @param password  ftp登录密码
   * @param pathname  ftp服务器文件目录
   * @param filename  文件名称
   * @param localpath 下载后的文件路径
   * @return
   */
  public static boolean downloadfile(string hostname, int port, string username, string password, string pathname, string filename, string localpath){
    boolean flag = false;
    ftpclient ftpclient = new ftpclient();
    try {
      //连接ftp服务器
      ftpclient.connect(hostname, port);
      //登录ftp服务器
      ftpclient.login(username, password);
      //验证ftp服务器是否登录成功
      int replycode = ftpclient.getreplycode();
      if(!ftpreply.ispositivecompletion(replycode)){
        return flag;
      }
      //切换ftp目录
      ftpclient.changeworkingdirectory(pathname);
      ftpfile[] ftpfiles = ftpclient.listfiles();
      for(ftpfile file : ftpfiles){
        if(filename.equalsignorecase(file.getname())){
          file localfile = new file(localpath + "/" + file.getname());
          outputstream os = new fileoutputstream(localfile);
          ftpclient.retrievefile(file.getname(), os);
          os.close();
        }
      }
      ftpclient.logout();
      flag = true;
    } catch (exception e) {
      e.printstacktrace();
    } finally{
      if(ftpclient.isconnected()){
        try {
          ftpclient.logout();
        } catch (ioexception e) {
         
        }
      }
    }
    return flag;
  }
 
}

favftputiltest.java

package com.favccxx.favsoft.util;
 
import junit.framework.testcase;
 
public class favftptest extends testcase {
   
  public void testfavftputil(){
    string hostname = "127.0.0.1";
    int port = 21;
    string username = "business";
    string password = "business";
    string pathname = "business/ebook"; 
    string filename = "big.rar"; 
    string originfilename = "c:\\users\\downloads\\downloads.rar";
    favftputil.uploadfilefromproduction(hostname, port, username, password, pathname, filename, originfilename);
//   string localpath = "d:/";
     
//   favftputil.downloadfile(hostname, port, username, password, pathname, filename, localpath);
  }
 
}

以上是本文的全部内容,希望大家喜欢。