Java封裝ftp工具類大全

下載文件流(獲取到io流文件)java

package com.kl.print.util;apache

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;服務器

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;工具


/** 
 * ftp上傳下載工具類   
 * @author  wangn
 * @date    2018年01月30日 
 * @version 1.0 
 */  
public class FtpUtils {
     private final static Log logger = LogFactory.getLog(FtpUtils.class);  
     private static FTPClient ftp;
    
     public static FTPClient getFTPClient(String ftpHost, String ftpUserName,  
                String ftpPassword, int ftpPort) {  
            FTPClient ftpClient = new FTPClient();  
            try {  
                ftpClient = new FTPClient();  
                ftpClient.connect(ftpHost, ftpPort);// 鏈接FTP服務器  
                ftpClient.login(ftpUserName, ftpPassword);// 登錄FTP服務器  
                if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  
                    logger.info("未鏈接到FTP,用戶名或密碼錯誤。");  
                    ftpClient.disconnect();  
                } else {  
                    logger.info("FTP鏈接成功。");  
                }  
            } catch (SocketException e) {  
                e.printStackTrace();  
                logger.info("FTP的IP地址可能錯誤,請正確配置。");  
            } catch (IOException e) {  
                e.printStackTrace();  
                logger.info("FTP的端口錯誤,請正確配置。");  
            }  
            return ftpClient;  
        }  
    /**  
     * Description: 向FTP服務器上傳文件  
     * @param host FTP服務器hostname  
     * @param port FTP服務器端口  
     * @param username FTP登陸帳號  
     * @param password FTP登陸密碼  
     * @param filePath FTP服務器文件存放路徑。
     * @param filename 上傳到FTP服務器上的文件名  
     * @param input 輸入流  
     * @return 成功返回true,不然返回false  
     */    
    public static boolean uploadFile(String host, int port, String username, String password, String filePath,String path,  
            String filename, InputStream input) {  
        boolean result = false;  
        FTPClient ftp = new FTPClient();  
        try {  
            int reply;  
            ftp.connect(host, port);// 鏈接FTP服務器  
            // 若是採用默認端口,能夠使用ftp.connect(host)的方式直接鏈接FTP服務器  
            ftp.enterLocalPassiveMode();  
            ftp.login(username, password);// 登陸  
            reply = ftp.getReplyCode();  
            if (!FTPReply.isPositiveCompletion(reply)) {  
                ftp.disconnect();  
                return result;  
            }  
            //設置上傳文件的類型爲二進制類型  
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            ftp.cwd("/");
            path = path.replaceAll("\\\\", "/");
            String[] paths = path.split("/");
            for (int i = 0; i < paths.length; i++)
            {
                String pathTemp = paths[i];
                
                /* 建立的是父子目錄 */
                if(!ftp.makeDirectory(pathTemp))
                {
                    System.out.println("---建立目錄失敗--");
                }
                
                
                ftp.changeWorkingDirectory(pathTemp);
                
                /* 進入到該目錄 */
                /*ftp.cwd(pathTemp);
                System.out.println("ftp.cwd(pathTemp)"+    ftp.cwd(pathTemp));
                ftp.storeFile(filename, input);*/
            }
            
           return ftp.storeFile(filename, input);
            //上傳文件  
           // ftp.makeDirectory(path);  
           /* if (!ftp.storeFile(filename, input)) {  
                return result;  
            }  
            input.close();  
            ftp.logout();  
            result = true;  */
            
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (ftp.isConnected()) {  
                try {  
                    ftp.disconnect();  
                } catch (IOException ioe) {  
                }  
            }  
        }  
        return result;  
    } 
     /* 
     * 從FTP服務器下載文件 
     *  
     * @param ftpHost FTP IP地址 
     *  
     * @param ftpPassword FTP用戶名密碼 
     *  
     * @param ftpPort FTP端口 
     *  
     * @param ftpPath FTP服務器中文件所在路徑 格式: ftptest/aa 
     *  
     * @param localPath 下載到本地的位置 格式:H:/download 
     *  
     * @param fileName 文件名稱 
     */  
     public static OutputStream downloadFtpFile(String ftpHost, String ftpUserName,  
                String ftpPassword, int ftpPort, String ftpPath,  
                String fileName) {  
      
            FTPClient ftpClient = null;  
            OutputStream os=null;
            try {  
                ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);  
                ftpClient.setControlEncoding("UTF-8"); // 中文支持  
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
                ftpClient.enterLocalPassiveMode();  
                ftpClient.changeWorkingDirectory(ftpPath);  
                /*File localFile = new File(localPath + File.separatorChar + fileName);  
                 判斷目錄是否存在,不存在的話建立(父目錄) 
                if(!localFile.getParentFile().exists()){
                    localFile.getParentFile().mkdirs();
                }*/
                 os = new FileOutputStream(fileName);  
                ftpClient.retrieveFile(fileName, os);  
                os.close();  
                ftpClient.logout();  
                return os;
            } catch (FileNotFoundException e) {  
                logger.error("沒有找到" + ftpPath + "文件");  
                e.printStackTrace();  
            } catch (SocketException e) {  
                logger.error("鏈接FTP失敗.");  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
                logger.error("文件讀取錯誤。");  
                e.printStackTrace();  
            }  
            return null;
        }  spa

        
         /**
          * @param ip
          * @param port
          * @param userName
          * @param userPwd
          * @param path
          * @throws SocketException
          * @throws IOException function:鏈接到服務器
          */
         public static  OutputStream downloadFile(String ip, int port, String userName, String userPwd, String path,String fileName) {
             ftp = new FTPClient();
             ByteArrayOutputStream swapStream =null;
          try {
           // 鏈接
              ftp.connect(ip, port);
           // 登陸
              ftp.login(userName, userPwd);
           if (path != null && path.length() > 0) {
               //System.out.println("path:"+path);
            // 跳轉到指定目錄
               ftp.changeWorkingDirectory(path);
            InputStream ins = null; 
            
             try {  
             ins = ftp.retrieveFileStream(fileName); 
              // System.out.println("ins:"+ins.available());
               
               swapStream= new ByteArrayOutputStream();
                      int ch;
                      while ((ch = ins.read()) != -1) {   
                           swapStream.write(ch);   
                     }
                    // System.out.println("swapStream:"+swapStream.size());
             if(ins != null){  
             ins.close();  
            }  
             
             // 主動調用一次getReply()把接下來的226消費掉. 這樣作是能夠解決這個返回null問題  
             ftp.getReply();  
             } catch (IOException e) {  
             e.printStackTrace();  
             }  
            
           }
          } catch (SocketException e) {
           e.printStackTrace();
          } catch (IOException e) {
           e.printStackTrace();
          }finally {
              FtpUtils.closeServer();
          }
          return swapStream;
         }.net

         /**
          * @throws IOException function:關閉鏈接
          */
         public static void closeServer() {
          if (ftp.isConnected()) {
           try {
               ftp.logout();
               ftp.disconnect();
           } catch (IOException e) {
            e.printStackTrace();
           }
          }
         }
        
        public static void main(String[] args) throws Exception {
            /*String ftpHost = "192.168.0.85";  
            String ftpUserName = "icbc";
            String ftpPassword = "evhAB6#5";  
            int ftpPort = 21;  
            String ftpPath = "/data/ftp/icbc/2017/02/10";  
            //String localPath = "D:/dd/bb"; 
            String  fileName="1708041358198180SW01.pdf";*/
           
            //讀取文件的名稱,能夠經過給定字段進行查詢文件
            //FtpUtils.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName);
           
           // File localFile = new File(localPath + File.separatorChar + fileName);  
            /* 判斷目錄是否存在,不存在的話建立(父目錄) */
             String fileName="1708041358198180SW03.pdf";
              String ip = "192.168.0.85";        // 服務器IP地址
              String userName = "*******";        // 用戶名
             String userPwd = "*********";        // 密碼
             int port = 21;      // 端口號
             String path = "/2018/02/12";        // 讀取文件的存放目錄
          OutputStream outputStream= FtpUtils.downloadFile(ip, port, userName, userPwd, path,fileName);
          System.out.println("文件內容爲:"+outputStream.toString());
        }
}
 ip

相關文章
相關標籤/搜索