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

JAVA技术实现上传下载文件到FTP服务器(完整)

程序员文章站 2024-03-05 08:43:18
具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用ftp服务器是一个很好的选择。本文使用apache jakarta commons net(commons-...

具体详细介绍请看下文:

在使用文件进行交互数据的应用来说,使用ftp服务器是一个很好的选择。本文使用apache jakarta commons net(commons-net-3.3.jar) 基于filezilla server服务器实现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);
 }

}

以上就是java通过ftp上传下载文件的完整代码,希望对大家有所帮助。