Java通过FTP服务器上传下载文件的解决方案

Java通过FTP服务器上传下载文件的解决方案,第1张

Java通过FTP服务器上传下载文件的解决方案

对于使用文件交换数据的应用,使用FTP服务器是一个非常好的解决方案。本文利用ApacheJakartacommonsnet(commons-net-3.3.jar)实现了基于FileZilla服务器的FTP服务器上传/下载/删除文件的 *** 作。


关于设置和配置FileZilla服务器的详细过程,请参见FileZilla服务器安装和配置教程。之前有朋友说,上传大文件(几百米以上的文件)到FTP服务器时,会再次出现无法重命名的问题。不过我亲自测试过,上传2G文件到FileZilla服务器没有这个问题,朋友们可以放心使用这个代码。


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 portFTP服务器端口号  * @param usernameFTP登录帐号  * @param passwordFTP登录密码  * @param pathnameFTP服务器保存目录  * @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 portFTP服务器端口号  * @param usernameFTP登录帐号  * @param passwordFTP登录密码  * @param pathnameFTP服务器保存目录  * @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 portFTP服务器端口号  * @param usernameFTP登录帐号  * @param passwordFTP登录密码  * @param pathnameFTP服务器保存目录  * @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 portFTP服务器端口号  * @param usernameFTP登录帐号  * @param passwordFTP登录密码  * @param pathnameFTP服务器保存目录  * @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 portFTP服务器端口号  * @param usernameFTP登录帐号  * @param passwordFTP登录密码  * @param pathnameFTP服务器文件目录  * @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; } }


faftputiltest.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); } }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/779983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存