• [Java] 使用 Apache的 Commons-net库 实现FTP操作


        因为最近工作中需要用到FTP操作,而手上又没有现成的FTP代码。就去网上找了一下,发现大家都使用Apache的 Commons-net库中的FTPClient。

        但是,感觉用起来不太方便。又在网上找到了很多封装过的。觉得也不是很好用。于是就自己写了一个。网上大多是例子都是直接对文件进行操作,而我更需要的是读到内存,或者从内存上写。并且有很多实用单例模式,但是我觉得如果调用比较多的话,可能会出现问题。

      1 package com.best.oasis.util.helper;
      2 
      3 /**
      4  * 封装了一些FTP操作
      5  * Created by bl05973 on 2016/3/11.
      6  */
      7 
      8 import java.io.BufferedReader;
      9 import java.io.FileOutputStream;
     10 import java.io.IOException;
     11 import java.io.InputStream;
     12 import java.io.InputStreamReader;
     13 import java.io.OutputStream;
     14 import java.io.OutputStreamWriter;
     15 import java.util.ArrayList;
     16 import java.util.List;
     17 
     18 import org.apache.commons.net.ftp.FTP;
     19 import org.apache.commons.net.ftp.FTPClient;
     20 import org.apache.commons.net.ftp.FTPCmd;
     21 import org.apache.commons.net.ftp.FTPFile;
     22 import org.apache.commons.net.ftp.FTPReply;
     23 import org.apache.log4j.Logger;
     24 
     25 public class FTPUtil {
     26     private static Logger logger = Logger.getLogger(FTPUtil.class);
     27 
     28     private static FTPClient getConnection() {
     29         FTPClient client = new FTPClient();
     30         client.setControlEncoding("UTF-8");
     31         client.setDataTimeout(30000);
     32         client.setDefaultTimeout(30000);
     33         return client;
     34     }
     35 
     36     public static FTPClient getConnection(String host) throws IOException {
     37         FTPClient client = getConnection();
     38         client.connect(host);
     39         if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
     40             throw new IOException("connect error");
     41         }
     42         return client;
     43     }
     44     public static FTPClient getConnection(String host, int port) throws IOException {
     45         FTPClient client = getConnection();
     46         client.connect(host, port);
     47         if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
     48             throw new IOException("connect error");
     49         }
     50         return client;
     51     }
     52 
     53     public static FTPClient getConnection(String host, String username, String password) throws
     54             IOException {
     55         FTPClient client= getConnection(host);
     56         if (StringUtil.isNotBlank(username)) {
     57             client.login(username, password);
     58         }
     59         //if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
     60         //    throw new IOException("login error");
     61         //}
     62         return client;
     63     }
     64 
     65     public static FTPClient getConnection(String host, int port, String username, String password)
     66             throws IOException {
     67         FTPClient client = getConnection(host, port);
     68         if (StringUtil.isNotBlank(username)) {
     69             client.login(username, password);
     70         }
     71         //if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
     72         //    throw new IOException("login error");
     73         //}
     74         return client;
     75     }
     76 
     77     /**
     78      * 移动文件(若目标文件存在则不移动,并返回false)
     79      */
     80     public static boolean moveFile(String curFileName, String targetFileName, FTPClient client)
     81             throws IOException {
     82         int reply;
     83         reply = client.sendCommand(FTPCmd.RNFR, curFileName);
     84         if (FTPReply.isNegativePermanent(reply)) {
     85             //logger.error("FTP move file error. code:" + reply);
     86             System.out.println("FTP move file error. code:" + reply);
     87             return false;
     88         }
     89         reply = client.sendCommand(FTPCmd.RNTO, targetFileName);
     90         if (FTPReply.isNegativePermanent(reply)) {
     91             //logger.error("FTP move file error. code:" + reply);
     92             System.out.println("FTP move file error. code:" + reply);
     93             return false;
     94         }
     95         return true;
     96     }
     97 
     98     /**
     99      * 读取文件列表
    100      */
    101     public static List<String> getFileNameList(FTPClient client) throws IOException {
    102         FTPFile[] files = client.listFiles();
    103         List<String> fileNameList = new ArrayList<>();
    104         for (FTPFile file : files) {
    105             if (file.isFile()) {
    106                 fileNameList.add(file.getName());
    107             }
    108         }
    109         if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
    110             throw new IOException("get file name list error");
    111         }
    112         return fileNameList;
    113     }
    114 
    115     /**
    116      * 读文件
    117      */
    118     public static String readFile(String path, FTPClient client) throws IOException {
    119         client.setFileType(FTP.EBCDIC_FILE_TYPE);
    120         InputStream is = client.retrieveFileStream(path);
    121         if (is == null) {
    122             return null;
    123         }
    124         BufferedReader bf = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    125         StringBuilder sb = new StringBuilder();
    126         String str;
    127         while ((str = bf.readLine()) != null) {
    128             sb.append(str).append("
    ");
    129         }
    130         bf.close();
    131         client.completePendingCommand();
    132         if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
    133             throw new IOException("Remote file net closed success");
    134         }
    135         return sb.toString();
    136     }
    137 
    138     @Deprecated
    139     static boolean downFile(String remotePath, String localPath, FTPClient client)
    140             throws IOException {
    141         FileOutputStream fos = new FileOutputStream(localPath);
    142         client.setFileType(FTPClient.BINARY_FILE_TYPE);
    143         client.retrieveFile(remotePath, fos);
    144         client.completePendingCommand();
    145         if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
    146             throw new IOException("Remote file net closed success");
    147         }
    148         return false;
    149     }
    150 
    151     /**
    152      * 写文件
    153      */
    154     public static boolean storeAsFile(String context, String remotePath, FTPClient client)
    155             throws IOException {
    156         OutputStream out = client.storeFileStream(remotePath);
    157         OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
    158         writer.write(context);
    159         writer.flush();
    160         writer.close();
    161         return true;
    162     }
    163 
    164     public static void close(FTPClient client) {
    165         try {
    166             if (client != null) {
    167                 client.disconnect();
    168             }
    169         } catch (IOException e) {
    170 
    171         }
    172     }
    173 }
    FTPUtil

       

  • 相关阅读:
    在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口
    使用Setup Factory安装包制作工具制作安装包
    PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
    在DevExpress中使用CameraControl控件进行摄像头图像采集
    读取数据库信息构建视图字段的备注信息,方便程序代码生成
    混合框架中Oracle数据库的还原处理操作
    使用图片视频展示插件blueimp Gallery改造网站的视频图片展示
    .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用
    在Winform界面菜单中实现动态增加【最近使用的文件】菜单项
    文字处理控件TX Text Control的使用
  • 原文地址:https://www.cnblogs.com/Phantom01/p/5293697.html
Copyright © 2020-2023  润新知