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 遠程文件存放相對根目錄
         * @throws IOException
         * @throws FTPException
         */

         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);
                                } else {
                                        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;
        }

         /**
         * @param remotePath 遠程文件(夾)路徑
         * @return 當遠程資源存在且爲文件時返回ture,不然返回false
         */


         public boolean isFile(String remotePath) {
                 try {
                         int size = directoryList(remotePath).length;
                         if (size >= 0) {
                                 if (exists(remotePath)) {
                                         return true;
                                }
                        }
                } catch (Exception e) {
                }
                 return false;
        }

         /**
         * @param remotePath 遠程文件(夾)路徑
         * @return 當遠程資源存在且爲文件夾時返回ture,不然返回false
         */

         public boolean isDir(String remotePath) {
                 try {
                         int size = directoryList(remotePath).length;
                         if (size >= 0) {
                                 if (exists(remotePath)) {
                                         return false;
                                } else {
                                         return true;
                                }
                        }
                } catch (Exception e) {
                }
                 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緇撴潫錛?
2008-12-17 2:42:36 zzvcom.cms.ccm.ftp.UltraFTPClient ftpDownload
信息: FTP涓嬭澆浠庢湇鍔″櫒涓婄殑/ddd/b涓嬭澆鍒版湰鍦?c:/qqq緇撴潫錛?
2008-12-17 2:42:36 zzvcom.cms.ccm.ftp.UltraFTPClient ftpDownload
信息: FTP涓嬭澆浠庢湇鍔″櫒涓婄殑/ddd涓嬭澆鍒版湰鍦?c:/qqq緇撴潫錛?
Process finished with exit code 0
相關文章
相關標籤/搜索