JAVA调用FTPClient实现FTP上文件的操作

xiaoxiao2021-02-28  100

 在Java项目中,经常需要做一些FTP的操作,如向FTP上传文件、下载文件、文件重命名、文件删除、创建文件夹等等,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载重命名等操作文件。      如果是使用MAVEN管理项目则添加      <dependency>      <groupId>org.apache.camel</groupId>      <artifactId>camel-ftp</artifactId>      <version>2.13.2</version>      </dependency>      如果是普通的Java项目则需要添加camel-ftp-2.13.2.jar、camel-core-2.13.2.jar两个jar包      package cn.com.bestpay.pgw.zhpk; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.apache.commons.io.IOUtils;import org.apache.commons.NET.ftp.FTPClient; // int port 为FTP的端口号 默认为21 public class FtpUtils {     /**      * ftp上传单个文件      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            上传至ftp的路径名不包括ftp地址      * @param srcFileName      *            要上传的文件全路径名      * @param destName      *            上传至ftp后存储的文件名      * @throws IOException      */     public static boolean upload(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String srcFileName, String destName) throws IOException {         FTPClient ftpClient = new FTPClient();         FileInputStream fis = null;         boolean result = false;         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             File srcFile = new File(srcFileName);             fis = new FileInputStream(srcFile);             // 设置上传目录             ftpClient.changeWorkingDirectory(directory);             ftpClient.setBufferSize(1024);             ftpClient.setControlEncoding("gbk");             // 设置文件类型(二进制)             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);             result = ftpClient.storeFile(destName, fis);             return result;         } catch (NumberFormatException e) {             System.out.println("FTP端口配置错误:不是数字:");             throw e;         } catch (FileNotFoundException e) {             throw new FileNotFoundException();         } catch (IOException e) {             throw new IOException(e);         } finally {             IOUtils.closeQuietly(fis);             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      * FTP单个文件下载      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要下载的文件所在ftp的路径名不包含ftp地址      * @param destFileName      *            要下载的文件名      * @param downloadName      *            下载后锁存储的文件名全路径      */     public static boolean download(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String destFileName, String downloadName) throws IOException {         FTPClient ftpClient = new FTPClient();         boolean result = false;         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.setBufferSize(1024);             // 设置文件类型(二进制)             ftpClient.changeWorkingDirectory(directory);             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);             System.out.println("destFileName:" + destFileName + ",downloadName:" + downloadName);             result = ftpClient.retrieveFile(destFileName, new FileOutputStream(downloadName));             return result;         } catch (NumberFormatException e) {             throw e;         } catch (FileNotFoundException e) {             throw new FileNotFoundException();         } catch (IOException e) {             throw new IOException(e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要重命名的文件所在ftp的路径名不包含ftp地址      * @param oldFileName      *            要重命名的文件名      * @param newFileName      *            重命名后的文件名      * @throws IOException      */     public static boolean rename(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String oldFileName, String newFileName) throws IOException {         /**          * 判断远程文件是否重命名成功,如果成功返回true,否则返回false          */         boolean result = false;         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.changeWorkingDirectory(directory);             result = ftpClient.rename(oldFileName, newFileName);// 重命名远程文件             return result;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要删除的文件所在ftp的路径名不包含ftp地址      * @param fileName      *            要删除的文件名      * @return      * @throws IOException      */     public static boolean remove(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String fileName) throws IOException {         /**          * 判断远程文件是否移除成功,如果成功返回true,否则返回false          */         boolean result = false;         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.changeWorkingDirectory(directory);             result = ftpClient.deleteFile(fileName);// 删除远程文件             return result;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要创建的目录所在ftp的路径名不包含ftp地址      * @param newDirectory      *            要创建的新目录名      * @return      * @throws IOException      */     public static boolean makeDirecotory(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String newDirectory) throws IOException {         /**          * 判断远程文件是否移除成功,如果成功返回true,否则返回false          */         boolean result = false;         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.changeWorkingDirectory(directory);             result = ftpClient.makeDirectory(newDirectory);// 创建新目录             return result;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要重命名的目录所在ftp的路径名不包含ftp地址      * @param oldDirectory      *            要重命名的旧目录名      * @param newDirectory      *            重命名后的新目录      * @return      * @throws IOException      */     public static boolean renameDirecotory(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String oldDirectory, String newDirectory) throws IOException {         /**          * 判断远程文件是否移除成功,如果成功返回true,否则返回false          */         boolean result = false;         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.changeWorkingDirectory(directory);             result = ftpClient.rename(oldDirectory, newDirectory);// 重命名目录             return result;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      *            ftp地址      * @param userName      *            ftp的用户名      * @param password      *            ftp的密码      * @param directory      *            要重命名的目录所在ftp的路径名不包含ftp地址      * @param deldirectory      *            要删除的目录名      * @return      * @throws IOException      */     public static boolean removeDirecotory(String logSeq, String ftpUrl, String userName, int port, String password,             String directory, String deldirectory) throws IOException {         /**          * 判断远程文件是否移除成功,如果成功返回true,否则返回false          */         boolean result = false;         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.changeWorkingDirectory(directory);             result = ftpClient.removeDirectory(deldirectory);// 删除目录             return result;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     }     /**      *      * @param ftpUrl      * @param userName      * @param password      * @param directory      * @return      * @throws IOException      */     public static String[] list(String logSeq, String ftpUrl, String userName, int port, String password,             String directory) throws IOException {         FTPClient ftpClient = new FTPClient();         try {             ftpClient.connect(ftpUrl, port);             ftpClient.login(userName, password);             ftpClient.enterLocalPassiveMode();             ftpClient.setControlEncoding("gbk");             ftpClient.changeWorkingDirectory(directory);             ftpClient.enterLocalPassiveMode();             String[] list = ftpClient.listNames();// 删除目录             return list;         } catch (NumberFormatException e) {             throw e;         } catch (IOException e) {             throw new IOException("连接ftp服务器失败!", e);         } finally {             try {                 ftpClient.disconnect();             } catch (IOException e) {                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         }     } }
转载请注明原文地址: https://www.6miu.com/read-53882.html

最新回复(0)