实现 ftp 文件/文件夹的上传下载以及删除
2013-08-20 17:33
941 查看
基于apache commons-net的ftp 文件上传下载及删除 工具类,分享出来希望有人用得着,也方便自己以后查看~~~ package com.sslinm.tools; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.io.IOUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; /** * *【功能描述:ftp 工具类】 *【功能详细描述:逐条详细描述功能】 * @author 【lfssay】 * @see 【相关类/方法】 * @version 【类版本号, 2013-8-19 下午4:39:37】 * @since 【产品/模块版本】 */ public class FtpUtils { public static void main(String[] args) { // boolean flag = fileUpload("E:/tt/data","/admin/"); boolean flag = fileDownload("E:/tt/te/128","/admin/748/","748"); // System.out.println(flag); // boolean flag = deleteDir("/admin/3128/"); // boolean flag = deleteFile("/admin/2616/input/a0012.xml"); System.out.println(flag); } /** * *【功能描述:得到ftp 登陆结果 FtpClient】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @return * @throws IOException */ public static FTPClient getFTPClient() throws IOException{ FTPClient ftpClient = new FTPClient(); ftpClient.connect(ConfigReader.get("ftp.server","")); boolean flag = ftpClient.login(ConfigReader.get("ftp.username",""), ConfigReader.get("ftp.pwd","")); if(flag){ ftpClient.setControlKeepAliveTimeout(ConfigReader.getInt("ftp.active.time", 600)); return ftpClient; }else{ return null; } } /** * *【功能描述:上传文件 和文件夹】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param filePath 上传文件的路径 * @param ftpRePath 上传后存储的相对位置 eg:/admin/pic/ * @return true, 只有当所有流程都成功才返回true ,不为true就表示失败 */ @SuppressWarnings("finally") public static boolean fileUpload(String filePath,String ftpRePath) { FTPClient ftpClient = new FTPClient(); try { ftpClient = getFTPClient(); ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("GBK"); // 使用迭代器的方法以后,只会建立一个ftpClient 连接,方便ftp性能稳固 iterateUpload(ftpClient,filePath,ftpRePath); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("FTP上传失败 ", e); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("关闭FTP出现异常 ", e); } //当所有流程都成功以后返回成功 return true; } } /** * *【功能描述:上传工具类,迭代】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param ftpClient * @param filePath * @param ftpRePath * @throws IOException */ public static void iterateUpload(FTPClient ftpClient,String filePath,String ftpRePath) throws IOException{ File srcFile = new File(filePath); // 原始上传文件 if(srcFile.isFile()){ FileInputStream fis = new FileInputStream(srcFile); ftpClient.changeWorkingDirectory(ftpRePath); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.storeFile(srcFile.getName(), fis); }else if(srcFile.isDirectory()){ // 只要是文件夹,就把当前文件夹的地址创建好。 ftpClient.makeDirectory(ftpRePath+File.separator+srcFile.getName()); File[] files = srcFile.listFiles(); // 如果为空,就只创建文件夹 for(File f:files){ iterateUpload(ftpClient,f.getAbsolutePath(),ftpRePath+File.separator+srcFile.getName()); } } } /** * *【功能描述:ftp 下载, 指定下载ftp上某一个目录或者文件到本地】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param downloadPath 本地地址 * @param dir ftp上文件地址(相对的如:/admin/rt/) * @param fileName ftp上要下载的文件名 * @return true, 只有所有流程都成功才返回true, 不为true就表示失败 */ @SuppressWarnings("finally") public static boolean fileDownload(String downloadPath,String dir,String fileName) { FTPClient ftpClient = new FTPClient(); try { ftpClient = getFTPClient(); ftpClient.setBufferSize(1024); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); iterateDown(ftpClient,dir,downloadPath+File.separator+fileName); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("FTP下载失败 ", e); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("关闭FTP连接失败 ", e); } return true; } } /** * *【功能描述:下载功能的迭代器,】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param ftpClient ftpClient 连接器 * @param dir ftp上的路径 * @param downloadPath 本地路径 * @throws IOException */ public static void iterateDown(FTPClient ftpClient,String dir,String downloadPath) throws IOException{ // 列出这个地址对应到的是文件夹还是文件 FTPFile[] files = ftpClient.listFiles(dir); for(FTPFile f:files){ //如果当前目录还没有创建,那么就在这里创建 File filedown = new File(downloadPath); if(!filedown.exists()){ filedown.mkdirs(); } String localPath = downloadPath+File.separator+f.getName(); File file = new File(localPath); if(f.isFile()){ FileOutputStream fos = null; fos = new FileOutputStream(localPath); String path = dir+File.separator+f.getName(); ftpClient.retrieveFile(path, fos); IOUtils.closeQuietly(fos); }else if(f.isDirectory()){ file.mkdirs(); iterateDown(ftpClient,dir+File.separator+f.getName(),localPath); } } } /** * *【功能描述:删除ftp 上指定的文件】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param ftpPath ftp上的文件路径 * @return true 成功,false,失败 */ public static boolean deleteDir(String ftpPath){ FTPClient ftpClient = new FTPClient(); boolean flag = false; try { ftpClient = getFTPClient(); ftpClient.setControlKeepAliveTimeout(ConfigReader.getInt("ftp.active.time", 600)); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); flag = iterateDelete(ftpClient,ftpPath); ftpClient.disconnect(); } catch (IOException e) { // TODO 异常处理块 e.printStackTrace(); } return flag; } /** * *【功能描述:删除文件夹】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param ftpClient * @param ftpPath 文件夹的地址 * @return true 表似成功,false 失败 * @throws IOException */ public static boolean iterateDelete(FTPClient ftpClient,String ftpPath) throws IOException{ FTPFile[] files = ftpClient.listFiles(ftpPath); boolean flag = false; for(FTPFile f:files){ String path = ftpPath+File.separator+f.getName(); if(f.isFile()){ // 是文件就删除文件 ftpClient.deleteFile(path); }else if(f.isDirectory()){ iterateDelete(ftpClient,path); } } // 每次删除文件夹以后就去查看该文件夹下面是否还有文件,没有就删除该空文件夹 FTPFile[] files2 = ftpClient.listFiles(ftpPath); if(files2.length==0){ flag = ftpClient.removeDirectory(ftpPath); }else{ flag = false; } return flag; } /** * *【功能描述:删除文件】 *【功能详细描述:功能详细描述】 * @see 【类、类#方法、类#成员】 * @param filePath * @return */ public static boolean deleteFile(String filePath){ boolean flag = false; try { FTPClient ftpClient = getFTPClient(); flag = ftpClient.deleteFile(filePath); } catch (IOException e) { // TODO 异常处理块 e.printStackTrace(); } return flag; } }
相关文章推荐
- C#实现多文件上传,写到文件夹中,获取文件信息以及下载文件和删除文件
- Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法
- apache FtpClient上传下载删除文件夹及文件
- .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总
- Java中实现FTP文件上传下载 涉及中文路径以及中文文件
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- php下连接ftp实现文件的上传、下载、删除文件实例代码
- java实现ftp下文件的上传、下载和删除
- java操作FTP,实现文件上传下载删除操作
- Java连接FTP服务器,并上传或下载以及删除ftp服务器中的文件
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- java操作hdfs,实现文件上传、下载以及查看当前文件夹下所有文件
- FTP实现文件/文件夹的上传或下载
- Java实现FTP文件上传、下载和删除
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- java实现ftp连接、登陆、上传、下载、删除文件、获取目录、文件列表
- JAVA实现FTP服务器文件的上传,下载,删除功能
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1