JAVA技术实现上传下载文件到FTP服务器(完整)
程序员文章站
2024-03-05 23:05:31
具体详细介绍请看下文:
在使用文件进行交互数据的应用来说,使用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上传下载文件的完整代码,希望对大家有所帮助。