天天看點

Java FTP增強工具

package zzvcom.cms.ccm.ftp; 

import com.enterprisedt.net.ftp.FTPException; 

import com.enterprisedt.net.ftp.FTPFile; 

import com.enterprisedt.net.ftp.FileTransferClient; 

import com.enterprisedt.net.ftp.WriteMode; 

import org.apache.commons.logging.Log; 

import org.apache.commons.logging.LogFactory; 

import zzvcom.cms.ccm.commons.StringTookit; 

import java.io.File; 

import java.io.IOException; 

import java.text.ParseException; 

/** 

* FTP增強工具 

* @author leizhimin 2008-12-13 16:13:01 

*/ 

public class UltraFTPClient extends FileTransferClient { 

        private static Log log = LogFactory.getLog(UltraFTPClient.class); 

        public UltraFTPClient() { 

        } 

        /** 

         * 下載下傳檔案(夾),在本地保持FTP上的目錄結構 

         * 

         * @param localFolderPath 本地存放檔案夾 

         * @param remotePath            遠端檔案(夾)路徑 

         * @param remoteSubPath     遠端檔案存放相對根目錄 

         * @throws FTPException 

         * @throws IOException 

         */ 

        public void ftpDownload(final String localFolderPath, final String remotePath, String remoteSubPath) throws FTPException, IOException, ParseException { 

                if (isDir(remoteSubPath)) { 

                        String localPath = localFolderPath + StringTookit.getRelativeRootPath(remoteSubPath, StringTookit.getParentPath(remotePath)); 

                        if (!new File(localPath).exists()) 

                                new File(localPath).mkdirs(); 

                        String[] x = directoryNameList(remoteSubPath, false); 

                        for (String fname : x) { 

                                String rmFilePath =StringTookit.formatPath(remoteSubPath + "/" + fname); 

                                if (isDir(rmFilePath)) { 

                                        ftpDownload(localFolderPath, remotePath, rmFilePath); 

                                } else { 

                                        String _localPath = localFolderPath + "/" + 

                                                        StringTookit.getRelativeRootPath(rmFilePath, StringTookit.getParentPath(remotePath)); 

//                                        downloadFile(_localPath, rmFilePath, WriteMode.OVERWRITE); 

                                        downloadFile(_localPath, rmFilePath); 

                                } 

                        } 

                } else if (isFile(remotePath)) { 

                        String localPath = localFolderPath + StringTookit.getRelativeRootPath(remoteSubPath, remotePath); 

//                        downloadFile(localPath, remoteSubPath, WriteMode.OVERWRITE); 

                        downloadFile(localPath, remoteSubPath); 

                } else { 

                        log.error("所下載下傳的檔案或檔案夾不存在,請檢查!"); 

                } 

                log.info("FTP下載下傳從伺服器上的" + remoteSubPath + "下載下傳到本地" + localFolderPath + "結束!"); 

         * 上傳檔案(夾),在FTP上保持本地的目錄結構 

         * @param localFile         本地檔案 

         * @param localFilePath 本地檔案的路徑 

         * @param remoteSubPath 遠端檔案存放相對根目錄 

        public void ftpUpload(File localFile, final String localFilePath, final String remoteSubPath) throws IOException, FTPException { 

                if (localFile.isDirectory()) { 

                        for (File file : localFile.listFiles()) { 

                                if (file.isDirectory()) { 

                                        String remotePath = StringTookit.formatPath(remoteSubPath) + StringTookit.getRelativeRootPath(file.getPath(), StringTookit.getParentPath(localFilePath)); 

                                        log.info(remotePath); 

                                        if (!isExist(remotePath)) createDirectory(remotePath); 

                                        ftpUpload(file, localFilePath, remoteSubPath); 

                                        String remotePath = StringTookit.formatPath(remoteSubPath) + 

                                                        StringTookit.getRelativeRootPath(file.getPath(), StringTookit.getParentPath(localFilePath)); 

                                        uploadFile(file.getPath(), remotePath, WriteMode.APPEND); 

                } else if (localFile.isFile()) { 

                        String remotePath = StringTookit.formatPath(remoteSubPath) + 

                                        StringTookit.getRelativeRootPath(localFile.getPath(), StringTookit.getParentPath(localFilePath)); 

                        if (!isExist(StringTookit.getParentPath(remotePath))) 

                                createDirectory(StringTookit.getParentPath(remotePath)); 

                        System.out.println(remotePath); 

                        uploadFile(localFile.getPath(), remotePath, WriteMode.APPEND); 

                log.info("FTP上傳" + localFile.getPath() + "到" + remoteSubPath + "目錄下結束!"); 

         * @param remotePath 遠端檔案(夾)路徑 

         * @return 遠端的檔案(夾)資源是否存在 

        public boolean isExist(String remotePath) { 

                boolean flag = true; 

                try { 

                        directoryList(remotePath); 

                } catch (Exception e) { 

                        flag = false; 

                return flag; 

         * @return 當遠端資源存在且為檔案時傳回ture,否則傳回false 

        public boolean isFile(String remotePath) { 

                        int size = directoryList(remotePath).length; 

                        if (size >= 0) { 

                                if (exists(remotePath)) { 

                                        return true; 

                return false; 

         * @return 當遠端資源存在且為檔案夾時傳回ture,否則傳回false 

        public boolean isDir(String remotePath) { 

                                        return false; 

2008-12-17 2:42:36 zzvcom.cms.ccm.ftp.FtpServerConfigration buildFtpClient

資訊: connection ftp success!

2008-12-17 2:42:36 zzvcom.cms.ccm.ftp.UltraFTPClient ftpDownload

資訊: FTP涓嬭澆浠庢湇鍔″櫒涓婄殑/ddd/a涓嬭澆鍒版湰鍦?c:/qqq缁撴潫锛?

資訊: FTP涓嬭澆浠庢湇鍔″櫒涓婄殑/ddd/b涓嬭澆鍒版湰鍦?c:/qqq缁撴潫锛?

資訊: FTP涓嬭澆浠庢湇鍔″櫒涓婄殑/ddd涓嬭澆鍒版湰鍦?c:/qqq缁撴潫锛?

Process finished with exit code 0

本文轉自 leizhimin 51CTO部落格,原文連結:http://blog.51cto.com/lavasoft/120222,如需轉載請自行聯系原作者