对于使用文件交换数据的应用,使用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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)