Java technology to upload and download files to FTP server (complete)

See the following for details:

For applications that use files to interact with data, using FTP server is a good choice. This paper uses Apache Jakarta commons net (commons-net-3.3. Jar) to upload / download / delete files on FTP server based on FileZilla server.

For the detailed setup and configuration process of FileZilla server, please refer to the installation and configuration tutorial of FileZilla server for details. A friend said that when uploading large files (files of more than a few hundred megabytes) to the FTP server, the problem of unable to rename will reappear, but I personally tested that uploading 2G files to the FileZilla server does not have this problem. Friends can rest assured to use this code.

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,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,String originfilename){
 boolean flag = false;
 try {
 String fileName = new File(originfilename).getName();
 InputStream inputStream = new FileInputStream(new File(originfilename));
 flag = uploadFile(hostname,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,String filename){
 boolean flag = false;
 FTPClient ftpClient = new FTPClient();
 try {
 //连接FTP服务器
 ftpClient.connect(hostname,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,String localpath){
 boolean flag = false;
 FTPClient ftpClient = new FTPClient();
 try {
 //连接FTP服务器
 ftpClient.connect(hostname,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,originfilename);
// String localpath = "D:/";
 
// FavFTPUtil.downloadFile(hostname,localpath);
 }

}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>