首页 > 编程 > Java > 正文

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

2019-11-26 15:04:29
字体:
来源:转载
供稿:网友

对于使用文件进行交换数据的应用来说,使用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);  } }

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表