• FTPClient上传下载等


      1 package com.lct.conference.controller.MonitorManagement.cofer;
      2 
      3 import org.apache.commons.net.ftp.FTPClient;
      4 import org.apache.commons.net.ftp.FTPFile;
      5 import org.apache.commons.net.ftp.FTPReply;
      6 
      7 import com.lct.conference.entity.filemngt.FileManageRes;
      8 
      9 
     10 import java.io.*;
     11 import java.net.SocketException;
     12 import java.util.ArrayList;
     13 
     14 
     15 public class FtpUtil {
     16     /**
     17      * 获取FTPClient对象
     18      *
     19      * @param ftpHost     FTP主机服务器
     20      * @param ftpPassword FTP 登录密码
     21      * @param ftpUserName FTP登录用户名
     22      * @param ftpPort     FTP端口 默认为21
     23      * @return
     24      */
     25     public static FTPClient getFTPClient(FileManageRes ftpinfo) {
     26         FTPClient ftpClient = new FTPClient();
     27         String ftpHost = ftpinfo.getFtpHost();
     28         String ftpUserName = ftpinfo.getFtpUserName();
     29         String ftpPassword = ftpinfo.getFtpPassword();
     30         int ftpPort = ftpinfo.getFtpPort();
     31         try {
     32             ftpClient = new FTPClient();
     33             ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
     34             ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
     35             if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
     36                 System.out.println("未连接到FTP,用户名或密码错误。");
     37                 ftpClient.disconnect();
     38             } else {
     39                 System.out.println("FTP连接成功。");
     40             }
     41         } catch (SocketException e) {
     42             e.printStackTrace();
     43             System.out.println("FTP的IP地址可能错误,请正确配置。");
     44         } catch (IOException e) {
     45             e.printStackTrace();
     46             System.out.println("FTP的端口错误,请正确配置。");
     47         }
     48         return ftpClient;
     49     }
     50 
     51     /*
     52      * 从FTP服务器下载文件
     53      *
     54      * @param ftpHost FTP IP地址
     55      * @param ftpUserName FTP 用户名
     56      * @param ftpPassword FTP用户名密码
     57      * @param ftpPort FTP端口
     58      * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
     59      * @param localPath 下载到本地的位置 格式:H:/download
     60      * @param fileName 文件名称
     61      */
     62     public static  boolean downloadFtpFile(String ftpPath, String localPath,
     63                                        String fileName,FileManageRes ftpinfo) {
     64         boolean flag = false;
     65         FTPClient ftpClient = null;
     66 
     67         try {
     68             ftpClient = getFTPClient(ftpinfo);
     69             ftpClient.setControlEncoding("UTF-8"); // 中文支持
     70             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
     71             ftpClient.enterLocalPassiveMode();
     72             ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes("GBK"),"iso-8859-1"));
     73             
     74 
     75             File localFile = new File(localPath + File.separatorChar + fileName);
     76             OutputStream os = new FileOutputStream(localFile);
     77             flag = ftpClient.retrieveFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), os);
     78             os.close();
     79             ftpClient.logout();
     80         } catch (FileNotFoundException e) {
     81             System.out.println("没有找到" + ftpPath + "文件");
     82             e.printStackTrace();
     83         } catch (SocketException e) {
     84             System.out.println("连接FTP失败.");
     85             e.printStackTrace();
     86         } catch (IOException e) {
     87             e.printStackTrace();
     88             System.out.println("文件读取错误。");
     89             e.printStackTrace();
     90         }
     91         return flag;
     92     }
     93 
     94     /**
     95      * Description: 向FTP服务器上传文件
     96      * @param ftpHost FTP服务器hostname
     97      * @param ftpUserName 账号
     98      * @param ftpPassword 密码
     99      * @param ftpPort 端口
    100      * @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
    101      * @param fileName ftp文件名称
    102      * @param input 文件流
    103      * @return 成功返回true,否则返回false
    104      */
    105     public static boolean uploadFile(String ftpPath,String fileName,InputStream input,FileManageRes ftpinfo) {
    106         boolean success = false;
    107         FTPClient ftpClient = null;
    108         try {
    109             int reply;
    110             ftpClient = getFTPClient(ftpinfo);
    111             reply = ftpClient.getReplyCode();
    112             if (!FTPReply.isPositiveCompletion(reply)) {
    113                 ftpClient.disconnect();
    114                 return success;
    115             }
    116             ftpClient.setControlEncoding("UTF-8"); // 中文支持
    117             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    118             ftpClient.enterLocalPassiveMode();
    119             ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes("GBK"),"iso-8859-1"));
    120             ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), input);
    121             input.close();
    122             ftpClient.logout();
    123             success = true;
    124         } catch (IOException e) {
    125             e.printStackTrace();
    126         } finally {
    127             if (ftpClient.isConnected()) {
    128                 try {
    129                     ftpClient.disconnect();
    130                 } catch (IOException ioe) {
    131                 }
    132             }
    133         }
    134         return success;
    135     }
    136     /**
    137      * Description: 向FTP服务器新建文件夹
    138      * @param ftpHost FTP服务器hostname
    139      * @param ftpUserName 账号
    140      * @param ftpPassword 密码
    141      * @param ftpPort 端口
    142      * @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
    143      * @param fileName ftp文件名称
    144      * @param input 文件流
    145      * @return 成功返回true,否则返回false
    146      */
    147     public static boolean uploadFolder(String ftpPath,String fileName,FileManageRes ftpinfo) {
    148         boolean success = false;
    149         FTPClient ftpClient = null;
    150         try {
    151             int reply;
    152             ftpClient = getFTPClient(ftpinfo);
    153             reply = ftpClient.getReplyCode();
    154             if (!FTPReply.isPositiveCompletion(reply)) {
    155                 ftpClient.disconnect();
    156                 return success;
    157             }
    158             ftpClient.setControlEncoding("UTF-8"); // 中文支持
    159             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    160             ftpClient.enterLocalPassiveMode();
    161             ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes("GBK"),"iso-8859-1"));
    162             ftpClient.makeDirectory(new String(fileName.getBytes("GBK"),"iso-8859-1"));
    163             ftpClient.logout();
    164             success = true;
    165         } catch (IOException e) {
    166             e.printStackTrace();
    167         } finally {
    168             if (ftpClient.isConnected()) {
    169                 try {
    170                     ftpClient.disconnect();
    171                 } catch (IOException ioe) {
    172                 }
    173             }
    174         }
    175         return success;
    176     }
    177     /**
    178      * Description: 重命名
    179      * @param ftpHost FTP服务器hostname
    180      * @param ftpUserName 账号
    181      * @param ftpPassword 密码
    182      * @param ftpPort 端口
    183      * @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
    184      * @param fileName ftp文件名称
    185      * @param input 文件流
    186      * @return 成功返回true,否则返回false
    187      */
    188     public static boolean renameFile(String ftpPath, String oldfileName,String newfileName,FileManageRes ftpinfo) {
    189         boolean success = false;
    190         FTPClient ftpClient = null;
    191         try {
    192             int reply;
    193             ftpClient = getFTPClient(ftpinfo);
    194             reply = ftpClient.getReplyCode();
    195             if (!FTPReply.isPositiveCompletion(reply)) {
    196                 ftpClient.disconnect();
    197                 return success;
    198             }
    199             ftpClient.setControlEncoding("UTF-8"); // 中文支持
    200             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    201             ftpClient.enterLocalPassiveMode();
    202             ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes("GBK"),"iso-8859-1"));
    203             ftpClient.rename(new String(oldfileName.getBytes("GBK"),"iso-8859-1"),new String(newfileName.getBytes("GBK"),"iso-8859-1"));
    204             ftpClient.logout();
    205             success = true;
    206         } catch (IOException e) {
    207             e.printStackTrace();
    208         } finally {
    209             if (ftpClient.isConnected()) {
    210                 try {
    211                     ftpClient.disconnect();
    212                 } catch (IOException ioe) {
    213                 }
    214             }
    215         }
    216         return success;
    217     }
    218     //TODO
    219     public static  boolean downLoadFolder(String ftpPath, String localPath,String fileName,FileManageRes ftpinfo){
    220         boolean flag = false;
    221         FTPClient ftpClient = null;
    222         String newfilename = null;
    223         String folderpath = fileCreate(localPath + File.separatorChar + fileName);
    224         try {
    225             ftpClient = getFTPClient(ftpinfo);
    226             ftpClient.setControlEncoding("GBK");
    227             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    228             ftpClient.enterLocalPassiveMode();
    229             ArrayList<String> pathArray=new ArrayList<String>();
    230             if("".equals(ftpPath)){
    231                 ftpClient.changeWorkingDirectory(new String(fileName.getBytes("GBK"),"iso-8859-1"));
    232             }else{
    233                 ftpClient.changeWorkingDirectory(new String((ftpPath+File.separatorChar+fileName).getBytes("GBK"),"iso-8859-1"));
    234             }
    235             getPath(ftpClient,fileName,pathArray,folderpath);
    236             download(ftpClient, pathArray, folderpath);
    237 //            if(ftpPath==null){
    238 //                ftpClient.changeWorkingDirectory(new String(fileName.getBytes("GBK"),"iso-8859-1"));
    239 //            }else{
    240 //                ftpClient.changeWorkingDirectory(new String((ftpPath+File.separatorChar+fileName).getBytes("GBK"),"iso-8859-1"));
    241 //            }
    242 //                FTPFile[] files = ftpClient.listFiles();  
    243 //                for(FTPFile file:files){  
    244 //                    if(file.isFile()){  
    245 //                        newfilename = file.getName();
    246 //                         File localFile = new File(folderpath + File.separatorChar + newfilename);
    247 //                         OutputStream os = new FileOutputStream(localFile);
    248 //                         flag = ftpClient.retrieveFile(new String(newfilename.getBytes("GBK"),"iso-8859-1"), os);
    249 //                         os.close();
    250 //                         ftpClient.logout();
    251 //                    }else if(file.isDirectory()){  
    252 //                        newfilename = file.getName();
    253 //                    }  
    254 //            }  
    255         } catch (FileNotFoundException e) {
    256             System.out.println("没有找到" + ftpPath + "文件");
    257             e.printStackTrace();
    258         } catch (SocketException e) {
    259             System.out.println("连接FTP失败.");
    260             e.printStackTrace();
    261         } catch (IOException e) {
    262             e.printStackTrace();
    263             System.out.println("文件读取错误。");
    264             e.printStackTrace();
    265         }
    266         return flag;
    267     }
    268     public static void getPath(FTPClient ftp,String path,ArrayList<String> pathArray,String folderpath) throws IOException{
    269         FTPFile[] files = ftp.listFiles();
    270         for (FTPFile ftpFile : files) {
    271             if(ftpFile.isFile()){
    272                 if("".equals(path)){
    273                     path+=ftpFile.getName();
    274                 }else{
    275                     path+="\"+ftpFile.getName();
    276                 }
    277                 pathArray.add(path);
    278             }
    279             if(ftpFile.isDirectory()){//如果是目录,则递归调用,查找里面所有文件
    280                 if("".equals(path)){
    281                     path+=ftpFile.getName();
    282                 }else{
    283                     path+="\"+ftpFile.getName();
    284                 }
    285                 folderpath=folderpath+"\"+ftpFile.getName();
    286                 fileCreate(folderpath);
    287                 ftp.changeWorkingDirectory(new String(ftpFile.getName().getBytes("GBK"),"iso-8859-1"));//改变当前路径
    288                 getPath(ftp,path,pathArray,folderpath);//递归调用
    289                 //path=path.substring(0, path.lastIndexOf("/"));//避免对之后的同目录下的路径构造作出干扰,
    290             }
    291         }
    292     }
    293     public static void download(FTPClient ftp,ArrayList<String> pathArray,String localRootPath) throws IOException{
    294         for (String string : pathArray) {
    295             String localPath=localRootPath+string;
    296             File localFile = new File(localPath);
    297             if (!localFile.exists()) {  
    298                 localFile.mkdirs();  
    299             }
    300         }
    301         for (String string : pathArray) {
    302             String localPath=localRootPath+string;//构造本地路径
    303             ftp.changeWorkingDirectory(string);
    304             FTPFile[] file=ftp.listFiles();
    305             for (FTPFile ftpFile : file) {
    306                 if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
    307                 File localFile = new File(localPath);
    308                 if(!ftpFile.isDirectory()){
    309                     OutputStream is = new FileOutputStream(localFile+"/"+ftpFile.getName());
    310                     ftp.retrieveFile(ftpFile.getName(), is);
    311                     is.close();
    312                 }
    313             }
    314         }
    315     }
    316     /**
    317      * 创建文件夹
    318      * @param parentPath 父类路径
    319      * @param fileDirName 创建文件夹的名称
    320      * @return 返回创建文件夹的路径
    321      */
    322     public static String fileCreate(String parentPath){
    323         String path=null;
    324         File pFile=new File(parentPath);
    325         if(!pFile.exists()){
    326             pFile.mkdir();//如果父类不存在则新建
    327         }
    328         
    329         path=pFile.getPath();//得到文件路径
    330         //cFile.setWritable(true);//设置为可写操作        
    331         return path;
    332     } 
    333 }
  • 相关阅读:
    (转)Entity Framework 4.1 之三(由4.0过渡到4.1/4.3)
    (转)修改的T4代码生成器(续)
    (转)【Smart Code Generator】 基于T4的代码生成器
    linux下播放mp3
    poj 2777 Count Color
    poj 1062 昂贵的聘礼
    uva 991 Safe Salutations
    uva 10587 Mayor's posters
    poj 2528 Mayor's posters
    逆序数
  • 原文地址:https://www.cnblogs.com/penghq/p/8193430.html
Copyright © 2020-2023  润新知