具体详细介绍请看下文:
在使用文件进行交互数据的应用来说,使用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,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); } }
以上就是JAVA通过FTP上传下载文件的完整代码,希望对大家有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。