FTP工具上传下载类


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;









public class FtpUtil {
    
    
        
       /**
         * 上传文件(可供Action/Controller层使用)
         * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器保存目录
         * @param fileName   上传到FTP服务器后的文件名称
         * @param inputStream 输入文件流
         * @return
         */
        public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
            boolean flag = false;
            FTPClient ftpClient = new FTPClient();
            ftpClient.setControlEncoding("UTF-8");
            try {
                
                //连接FTP服务器
                ftpClient.setControlEncoding("UTF-8");
                ftpClient.connect(hostname, port);
                //设置传输时间
                ftpClient.setDataTimeout(30000);
                //设置默认的全局超时时间
                ftpClient.setDefaultTimeout(6000);
                //登录FTP服务器
                ftpClient.login(username, password);
                //是否成功登录FTP服务器
                int replyCode = ftpClient.getReplyCode();
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    ftpClient.disconnect();
                    return flag;
                }
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.makeDirectory(pathname);
                ftpClient.changeWorkingDirectory(pathname);
                ftpClient.storeFile(fileName, inputStream);
                inputStream.close();
                ftpClient.logout();
                flag = true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                if(ftpClient.isConnected()){
                    try {
                        //断开连接
                        ftpClient.disconnect();
                    } catch (IOException e) {
                        logger1.error("FtpUtil:uploadFile-->FTP断开连接异常:!"+e.getMessage());
                        
                    }
                }
            }
            return flag;
        }
         
         
        /**
         * 上传文件(可对文件进行重命名)
         * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器保存目录
         * @param filename   上传到FTP服务器后的文件名称
         * @param originfilename 待上传文件的名称(绝对地址)
         * @return
         */
        public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
            boolean flag = false;
            try {
                InputStream inputStream = new FileInputStream(new File(originfilename));
                flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }
         
        /**
         * 上传文件(不可以进行文件的重命名操作)
         * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器保存目录
         * @param originfilename 待上传文件的名称(绝对地址)
         * @return
         */
        public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
            boolean flag = false;
            try {
                String fileName = new File(originfilename).getName();
                InputStream inputStream = new FileInputStream(new File(originfilename));
                flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }
         
         
        /**
         * 删除文件
         * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器保存目录
         * @param filename   要删除的文件名称
         * @return
         */
        public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename,String date){
    
            boolean flag = false;
            FTPClient ftpClient = new FTPClient();
            try {
                //连接FTP服务器
                ftpClient.connect(hostname, port);
                //设置传输时间
                ftpClient.setDataTimeout(35000);
                //设置默认的全局超时时间
                
                //登录FTP服务器
                ftpClient.login(username, password);
                //验证FTP服务器是否登录成功
                int replyCode = ftpClient.getReplyCode();
                
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    return flag;
                }
                ftpClient.enterLocalPassiveMode(); // 使用被动模式
                //切换FTP目录
                ftpClient.changeWorkingDirectory(filename);
                FTPFile[] ftpFiles= ftpClient.listFiles();
                if (ftpFiles.length>0) {
                    for(FTPFile file:ftpFiles ){
                        String name=file.getName();
                        if(date.equals(name)){
                        
                             long currTime = System.currentTimeMillis();
                             String deleteName="../"+filename+"/"+name;
                           
                             String bb= removeDirectoryALLFile(deleteName,ftpClient);
                       
                             long lastTime = System.currentTimeMillis();
                   
                             flag = true;
                        }
                        /*int index=name.lastIndexOf(".");
                        String suffix=name.substring(index+1);
                        String name1=fileName.get(suffix);  //获取要移动的文件名
                        if (name.equalsIgnoreCase(name1)) {
                            
                            long currTime = System.currentTimeMillis();
                          
                            ftpClient.deleteFile(file.getName());
                            long lastTime = System.currentTimeMillis();
                        
                            flag = true;
                                                    
                        }*/
                        
                     }
                    ftpClient.logout();    
                }else{
                    System.out.println("deleteFile未进行删除文件,遍历文件大小为0");
                }   
            } catch (Exception e) {
                
            } finally{
                if(ftpClient.isConnected()){
                    try {
                        ftpClient.disconnect();
                    } catch (IOException e) {
                        
                    }
                }
            }
            return flag;
        }
         
        /**
         * 下载文件
         * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器文件目录
         * @param filename   文件名称
         * @param localpath 下载后的文件路径
         * @return
         */
        
        public static List<Map<String, String>> downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
            
            /*System.out.println("hostname="+hostname+" port="+port+" username="+username+" password="+password+" pathname="+pathname);
            System.out.println(" filename="+filename+" localpath="+localpath);*/
            List<Map<String, String>> list=new ArrayList<Map<String,String>>();
            
            FTPClient ftpClient = new FTPClient();
            try {
                //连接FTP服务器
                ftpClient.connect(hostname, port);
               
                //设置传输时间
                ftpClient.setDataTimeout(1200000);
                //设置默认的全局超时时间;
                ftpClient.setDefaultTimeout(3600000);
                //登录FTP服务器
                ftpClient.login(username, password);
               
                //验证FTP服务器是否登录成功
                int replyCode = ftpClient.getReplyCode();
                System.out.println(" downloadFile-->验证服务器是否成功登陆:"+replyCode);
                //判断返回是否合法
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    //断开连接
                    ftpClient.disconnect();
                    System.out.println(" downloadFile-->连接服务器失败!");
                    return null;
                }
               ftpClient.enterLocalPassiveMode();  //被动模式
              /* ftpClient.enterLocalActiveMode();   //主动模式*/               
               //转移到FTP服务器目录 下文件
               
                boolean bb= ftpClient.changeWorkingDirectory(filename);
               System.out.println("成功转移到目录下filename:"+bb+"-"+"filename:"+filename);
                 if(bb){
                       FTPFile[] ftpFiles= ftpClient.listFiles();
                     
                       if(ftpFiles.length>0){
                           long currTime = System.currentTimeMillis();   
                           for(FTPFile file : ftpFiles){
                               String name=file.getName();
                               try{
                                   File localFile = new File(localpath + "//" + name);
                                   OutputStream os = new FileOutputStream(localFile);
                                   ftpClient.retrieveFile(name, os);
                                   os.flush();
                                   os.close();
                              //用来记录ftp文件下载的chk文件
                                   int index=name.lastIndexOf(".");
                                   String suffix=name.substring(index+1);
                                   if("chk".equalsIgnoreCase(suffix)){
                                    Map<String, String> map=new HashMap<String, String>();
                                      map.put("chk", name);
                                      System.out.println("downloadFile-->map="+map);
                                      list.add(map);
                                    }
                               }catch(Exception e){
                                  
                               }
                           }
                           
                         long lasttime = System.currentTimeMillis();
                            System.out.println("(lasttime-currTime:)"+(lasttime-currTime));
                   }      
               }else{
                System.out.println("hunanBSS downloadFile-->成功连接服务器,未有文件下载!");
               }
                ftpClient.logout();
            } catch (Exception e) {
                logger1.error("hunanBSS downloadFile-->连接服务器异常!"+e.getMessage(),e);
                    
            } finally{
                if(ftpClient.isConnected()){
                    try {
                        ftpClient.disconnect();
                    } catch (IOException e) {
                        logger1.error("[hunanBSS.FtpUtil] downloadFile-->FTP断开连接异常:!",e);
                    }
                }
            }
            
            return list;
           
        }
      /**
       * 移动文件  
       * @param hostname FTP服务器地址
         * @param port   FTP服务器端口号
         * @param username   FTP登录帐号
         * @param password   FTP登录密码
         * @param pathname   FTP服务器文件目录
         * @param filename   文件名称
         * @param newfilename 下载后的文件路径
         * @return
         */
     public static void removeName(String hostname, int port, String username, String password, String filename,String newfilename,String date){
         FTPClient ftpClient = new FTPClient();
            try {
                //连接FTP服务器
                ftpClient.connect(hostname, port);
               
                //设置传输时间
                ftpClient.setDataTimeout(1200000);
                //设置默认的全局超时时间;
                ftpClient.setDefaultTimeout(3600000);
                //登录FTP服务器
                ftpClient.login(username, password);
               
                //验证FTP服务器是否登录成功
                int replyCode = ftpClient.getReplyCode();
                System.out.println("hunanBSS removeName-->验证服务器是否成功登陆:"+replyCode);
                //判断返回是否合法
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    //断开连接
                    ftpClient.disconnect();
                    System.out.println("hunanBSS removeName-->连接服务器失败!");
                }
               ftpClient.enterLocalPassiveMode();  //被动模式
               boolean bb= ftpClient.changeWorkingDirectory(filename);
               System.out.println("成功转移到目录下filename:"+bb+"-"+"filename:"+filename);
               FTPFile[] ftpFiles= ftpClient.listFiles();
               System.out.println("ftpFiles.length:"+ftpFiles.length);
               if(ftpFiles.length>0){
                   for(FTPFile file : ftpFiles){
                       String name=file.getName();
                       System.out.println("hunanBSS removeName name="+name);
                       if(date.equals(name)){                                   //修改根据时间转移文件夹
                           String newfilename1="../"+newfilename+"/"+date;
                           System.out.println("newfilename1="+newfilename1);
                           ftpClient.rename(name, newfilename1);
                       }
                       /*int index=name.lastIndexOf(".");
                       String suffix=name.substring(index+1);
                       String name1=map.get(suffix);  //获取要移动的文件名
                       String newfilename1="../"+newfilename+"/"+name;
                       System.out.println("removeName-->newfilename="+newfilename1+" filename="+name+" downloadFilename="+name1);
                       if(name1.equalsIgnoreCase(name)){
                           ftpClient.rename(name, newfilename1);
                       }*/
                       
                   }
               }else {
                 System.out.println("----空文件----");
               }
            }catch (Exception e) {
                
                    
            } finally{
                if(ftpClient.isConnected()){
                    try {
                        ftpClient.disconnect();
                    } catch (IOException e) {
                    
                    }
                }
            }
     }
    
     /**
         * 删除Ftp上的文件夹 包括其中的文件 <功能详细描述>
         *
         * @param client Ftp对象
         * @param pathName 文件夹路径
         * @return SUCCESS:成功 其他:失败
         * @see [类、类#方法、类#成员] Create Author:<> Time:<Aug 18, 2014> Ver:< >
         */
        public static String removeDirectoryALLFile(String pathName,FTPClient ftpClient)
        {
            try
            {
            
                FTPFile[] files = ftpClient.listFiles(pathName);
                if (null != files && files.length > 0)
                {
                    for (FTPFile file : files)
                    {
                        if (file.isDirectory())
                        {
                            removeDirectoryALLFile(pathName + "/" + file.getName(),ftpClient );
                            
                            // 切换到父目录,不然删不掉文件夹
                            ftpClient.changeWorkingDirectory(pathName.substring(0,pathName.lastIndexOf("/")));
                            ftpClient.removeDirectory(pathName);
                        }
                        else
                        {
                            if (!ftpClient.deleteFile(pathName+ "/" + file.getName()))
                            {
                                return "删除指定文件" + pathName + "/" + file.getName() + "失败!";
                            }
                        }
                    }
                }
                // 切换到父目录,不然删不掉文件夹
                ftpClient.changeWorkingDirectory(pathName.substring(0,pathName.lastIndexOf("/")));
                ftpClient.removeDirectory(pathName);
            }
            catch (IOException e)
            {
                logger1.error("删除指定文件夹" + pathName + "失败:" + e.getMessage(),e);
            
                return "删除指定文件夹" + pathName + "失败:" + e;
            }
            
            return "删除成功";
        }
        
        /**
         * 删除指定文件
         *
         * @param filePath 文件路径(含文件名)
         * @see [类、类#方法、类#成员]
         * @return SUCCESS:成功 其他:失败信息
         */
        public String removeFile(String filePath)
        {
            try
            {
                FTPClient ftpClient = new FTPClient();
                if (StringUtils.isNotEmpty(filePath))
                {
                    if (!ftpClient.deleteFile(filePath))
                    {
                        return "删除文件" + filePath + "失败!";
                    }
                }
            }
            catch (IOException e)
            {
                logger1.error("删除文件失败:"+e.getMessage(),e);
                return "删除文件" + filePath + "失败!" + e;
            }
            return "success";
        }

    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值