软件编程
位置:首页>> 软件编程>> java编程>> Java通过FTP服务器上传下载文件的方法

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

作者:genuinecx  发布时间:2021-08-15 07:26:39 

标签:FTP,FTP服务器

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

}

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com