zoukankan      html  css  js  c++  java
  • Java对FTP进行上传下载删除操作的工具类

      1 import org.apache.commons.net.ftp.FTPClient;
      2 import org.apache.commons.net.ftp.FTPFile;
      3 import org.apache.commons.net.ftp.FTPReply;
      4 
      5 import java.io.*;
      6 import java.net.MalformedURLException;
      7 
      8 public class FtpUtils {
      9   // ftp服务器地址
     10   private String hostName;
     11   // ftp服务器端口号
     12   private Integer port;
     13   private String userName;
     14   // ftp登录密码
     15   private String password;
     16 
     17   private final FTPClient ftpClient = new FTPClient();
     18 
     19   /**
     20     * 初始化ftp服务器
     21     */
     22   public FtpUtils(String hostName, Integer port, String userName, String password) {
     23     this.hostName = hostName;
     24     this.port = port;
     25     this.userName = userName;
     26     this.password = password;
     27     ftpClient.setControlEncoding("utf-8");
     28     try {
     29       System.out.println("connecting...ftp服务器:" + this.hostName + ":" + this.port);
     30       ftpClient.connect(hostName, port); // 连接ftp服务器
     31       ftpClient.login(userName, password); // 登录ftp服务器
     32       int replyCode = ftpClient.getReplyCode(); // 是否成功登录服务器
     33       if (!FTPReply.isPositiveCompletion(replyCode)) {
     34         System.out.println("connect failed...ftp服务器:" + this.hostName + ":" + this.port);
     35       }
     36       System.out.println("connect successfu...ftp服务器:" + this.hostName + ":" + this.port);
     37     } catch (MalformedURLException e) {
     38       e.printStackTrace();
     39     } catch (IOException e) {
     40       e.printStackTrace();
     41     }
     42   }
     43 
     44   /**
     45     * 上传文件
     46     *
     47     * @param pathName ftp服务保存地址
     48     * @param fileName 上传到ftp的文件名
     49     * @param originfilename 待上传文件的名称(绝对地址) *
     50     * @return
     51     */
     52   public boolean uploadFile(String pathName, String fileName, String originfilename) {
     53     InputStream inputStream = null;
     54     try {
     55       inputStream = new FileInputStream(new File(originfilename));
     56     } catch (FileNotFoundException e) {
     57       e.printStackTrace();
     58     }
     59     return this.uploadFile(pathName, fileName, inputStream);
     60   }
     61 
     62   /**
     63     * 上传文件
     64     *
     65     * @param pathName ftp服务保存地址
     66     * @param fileName 上传到ftp的文件名
     67     * @param inputStream 输入文件流
     68     * @return
     69     */
     70   public boolean uploadFile(String pathName, String fileName, InputStream inputStream) {
     71     boolean flag = false;
     72     try {
     73       System.out.println("开始上传文件");
     74       // initFtpClient();
     75       ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
     76       createDirecroty(pathName);
     77       ftpClient.makeDirectory(pathName);
     78       ftpClient.changeWorkingDirectory(pathName);
     79       ftpClient.storeFile(fileName, inputStream);
     80       inputStream.close();
     81       ftpClient.logout();
     82       flag = true;
     83       System.out.println("上传文件成功");
     84     } catch (Exception e) {
     85       System.out.println("上传文件失败");
     86       e.printStackTrace();
     87     } finally {
     88       this.close(ftpClient, null, inputStream);
     89     }
     90     return flag;
     91   }
     92 
     93   // 改变目录路径
     94   public boolean changeWorkingDirectory(String directory) {
     95     boolean flag = true;
     96     try {
     97       flag = ftpClient.changeWorkingDirectory(directory);
     98       if (flag) {
     99         System.out.println("进入文件夹" + directory + " 成功!");
    100       } else {
    101         System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹");
    102       }
    103     } catch (IOException ioe) {
    104       ioe.printStackTrace();
    105     }
    106     return flag;
    107   }
    108 
    109   // 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
    110   public boolean createDirecroty(String remote) throws IOException {
    111     String directory = remote + "/";
    112     // 如果远程目录不存在,则递归创建远程服务器目录
    113     if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
    114       int start = 0;
    115       int end = 0;
    116       if (directory.startsWith("/")) {
    117         start = 1;
    118       } else {
    119         start = 0;
    120       }
    121       end = directory.indexOf("/", start);
    122       String path = "";
    123       String paths = "";
    124       while (true) {
    125         String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
    126         path = path + "/" + subDirectory;
    127         if (!existFile(path)) {
    128           if (makeDirectory(subDirectory)) {
    129             changeWorkingDirectory(subDirectory);
    130           } else {
    131             System.out.println("创建目录[" + subDirectory + "]失败");
    132             changeWorkingDirectory(subDirectory);
    133           }
    134         } else {
    135           changeWorkingDirectory(subDirectory);
    136         }
    137         paths = paths + "/" + subDirectory;
    138         start = end + 1;
    139         end = directory.indexOf("/", start);
    140         // 检查所有目录是否创建完毕
    141         if (end <= start) {
    142           break;
    143         }
    144       }
    145     }
    146     return true;
    147   }
    148 
    149   // 判断ftp服务器文件是否存在
    150   public boolean existFile(String path) throws IOException {
    151     boolean flag = false;
    152     ftpClient.changeWorkingDirectory(path);
    153     FTPFile[] ftpFileArr = ftpClient.listFiles();
    154     if (ftpFileArr.length > 0) {
    155       flag = true;
    156     }
    157     return flag;
    158   }
    159 
    160   // 创建目录
    161   public boolean makeDirectory(String dir) {
    162     boolean flag = true;
    163     try {
    164       flag = ftpClient.makeDirectory(dir);
    165       if (flag) {
    166         System.out.println("创建文件夹" + dir + " 成功!");
    167 
    168       } else {
    169         System.out.println("创建文件夹" + dir + " 失败!");
    170       }
    171     } catch (Exception e) {
    172       e.printStackTrace();
    173     }
    174     return flag;
    175   }
    176 
    177   /**
    178     * 下载文件 *
    179     *
    180     * @param pathName FTP服务器文件目录 *
    181     * @param fileName 文件名称 *
    182     * @param localpath 下载后的文件路径 *
    183     * @return
    184     */
    185   public boolean downloadFile(String pathName, String fileName, String localpath) {
    186     boolean flag = false;
    187     OutputStream os = null;
    188     try {
    189       System.out.println("开始下载文件");
    190       // initFtpClient();
    191       // 切换FTP目录
    192       ftpClient.changeWorkingDirectory(pathName);
    193       FTPFile[] ftpFiles = ftpClient.listFiles();
    194       for (FTPFile file : ftpFiles) {
    195         if (fileName.equalsIgnoreCase(file.getName())) {
    196           //如果该目录下有同名文件,则执行删除操作.
    197           if (new File(localpath + "/" + file.getName()).exists()) {
    198             new File(localpath + "/" + file.getName()).delete();
    199           }
    200 
    201           File localFile = new File(localpath + "/" + file.getName());
    202           os = new FileOutputStream(localFile);
    203           ftpClient.retrieveFile(file.getName(), os);
    204           os.close();
    205         }
    206       }
    207       ftpClient.logout();
    208       flag = true;
    209       System.out.println("下载文件成功");
    210     } catch (Exception e) {
    211       System.out.println("下载文件失败");
    212       e.printStackTrace();
    213     } finally {
    214 
    215     }
    216     return flag;
    217   }
    218 
    219   /**
    220     * @return
    221     * @description: 关闭相关流操作方法
    222     * @exception:
    223     * @date: 2019/6/17 15:50
    224     * @version: 1.0
    225     */
    226   private void close(FTPClient ftpClient, OutputStream out, InputStream in) {
    227     if (ftpClient.isConnected()) {
    228       try {
    229         ftpClient.disconnect();
    230       } catch (IOException e) {
    231         e.printStackTrace();
    232       }
    233     }
    234     if (null != out) {
    235       try {
    236         out.close();
    237       } catch (IOException e) {
    238         e.printStackTrace();
    239       }
    240     }
    241     if (null != in) {
    242       try {
    243         in.close();
    244       } catch (IOException e) {
    245         e.printStackTrace();
    246       }
    247     }
    248   }
    249 
    250   /**
    251     * 删除文件 *
    252     *
    253     * @param pathName FTP服务器保存目录 *
    254     * @param fileName 要删除的文件名称 *
    255     * @return
    256     */
    257   public boolean deleteFile(String pathName, String fileName) {
    258     boolean flag = false;
    259     try {
    260       System.out.println("开始删除文件");
    261       // initFtpClient();
    262       // 切换FTP目录
    263       ftpClient.changeWorkingDirectory(pathName);
    264       ftpClient.dele(fileName);
    265       ftpClient.logout();
    266       flag = true;
    267       System.out.println("删除文件成功");
    268     } catch (Exception e) {
    269       System.out.println("删除文件失败");
    270       e.printStackTrace();
    271     } finally {
    272       this.close(ftpClient, null, null);
    273     }
    274     return flag;
    275   }
    276 }
  • 相关阅读:
    java相关知识集锦
    adb相关基础知识集锦
    我所理解的OOP——UML六种关系
    据说每个大牛、小牛都应该有自己的库——DOM处理续
    据说每个大牛、小牛都应该有自己的库——DOM处理
    JavaScript 继承
    据说每个大牛、小牛都应该有自己的库——Event处理
    据说每个大牛、小牛都应该有自己的库——框架篇
    可拖动的DIV续
    CSS hack前传——背景图片全屏
  • 原文地址:https://www.cnblogs.com/1012hq/p/11195641.html
Copyright © 2011-2022 走看看