posts - 167,  comments - 30,  trackbacks - 0

          package com.sinovatech.unicom.efb.common;


          import java.io.BufferedOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.net.SocketException;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import org.apache.commons.net.ftp.FTPClient;
          import org.apache.commons.net.ftp.FTPFile;

          /**
           *
           * 目的:FTP文件類
           * <br/>
           *
           * FTP上傳文件、下載文件
           *
           * *
           */
          public class FTPUtil {
           private static final Log log = LogFactory.getLog(FTPUtil.class);

           public static int download(String ip,int port,String userName,String password,FileFilter filter,String localFilePath) throws SocketException, IOException{
            return download(ip, port, userName, password, null,filter, localFilePath);
           }
           
           public static int download(String ip,int port,String userName,String password,String ftpPath,FileFilter filter,String localFilePath) throws SocketException, IOException{
            FTPClient ftp = new FTPClient();
            int i=0;
             try {
              // 不為空連接 通過IP 和端口
              ftp.connect(ip, port);
              // 登陸
              if (ftp.login(userName, password)) {
               ftp.enterLocalPassiveMode();
               // 獲取FTP登陸目錄下的所有文件
               if(ftpPath!=null){
                if(!ftp.changeWorkingDirectory(ftpPath)){
                 throw new RuntimeException("找不到該目錄:"+ftpPath);
                }
               }
               FTPFile[] files = ftp.listFiles();
               for (FTPFile file : files) {
                String fileName = file.getName();
                if (filter.accept(fileName)) {
                 BufferedOutputStream out = null;
                 try {
                  // IO流下載文件到本地
                  out = new BufferedOutputStream(
                    new FileOutputStream(new File(localFilePath
                      ,fileName)));
                  // 開始下載
                  ftp.retrieveFile(file.getName(), out);
                  log.info("下載文件:" + file.getName() + "到本地路徑:"
                    + localFilePath);
                  i++;
                 } finally {
                  try {
                   if (out != null) {
                    out.close();
                   }
                  } catch (Exception e) {
                   log.error("", e);
                  }
                 }
                }
               }
              } else {
               i = -1;
              }
             } finally {
              if(ftp != null&&ftp.isConnected()){
               try {
                log.info("關閉ftp連接");
                ftp.disconnect();
               } catch (IOException e) {
                e.printStackTrace();
               }
              }
             }
            return i;
           }
           
           public static int download(String ip,int port,String userName,String password,String ftpPath,final String fileName,String localFilePath)throws SocketException, IOException{
            
           
            return  download(ip, port, userName, password,ftpPath,new FileFilter(){

              public boolean accept(String fileName1) {
             
               return fileName.equalsIgnoreCase(fileName1);
              }
              
             }, localFilePath);
           
           }
           
           
           public static int download(String ip,int port,String userName,String password,final String fileName,String localFilePath)throws SocketException, IOException{
            return  download(ip, port, userName, password,null,fileName, localFilePath);
           }

           
           /**
            * ftp上傳文件至服務器
            * @throws SocketException
            * @throws IOException
            */
           public static void uploadFile(String ip, int port, String userName, String password, String localFile)
                 throws SocketException, IOException{
            log.info("上傳本地文件: " + localFile);
            File file = new File(localFile);
            InputStream in = null;
            FTPClient ftpClient = null;
            if(file != null){
             try {
              ftpClient = new FTPClient();
              in = new FileInputStream(file);
              ftpClient.connect(ip,port);
              if(ftpClient.login(userName, password)){
               ftpClient.enterLocalPassiveMode();
               boolean flag= ftpClient.appendFile(file.getName(), in);
               log.info("上傳文件成功:" + flag);
              }
             }catch (SocketException e) {
              log.error("ftp上傳文件失敗:", e);
              throw e;
             }catch (IOException e) {
              log.error("ftp上傳文件失敗:", e);
              throw e;
             } finally{
              if(in != null){
               try {
                in.close();
               } catch (IOException e) {
                e.printStackTrace();
               }
              }
              if(ftpClient != null){
               try {
                ftpClient.disconnect();
               } catch (IOException e) {
                e.printStackTrace();
               }
              }
             }
            }
           }
           
           
           public static void upload(String ip, int port, String userName, String password, String path,String remotePath)
           throws SocketException, IOException{
            upload(ip, port, userName, password, new File(path), remotePath);
           }
           
           /**
            * ftp上傳文件至服務器
            * @throws SocketException
            * @throws IOException
            */
           public static void upload(String ip, int port, String userName, String password, File localFile,String remotePath)
                 throws SocketException, IOException{
            log.info("上傳本地文件: " + localFile.getName());
            InputStream in = null;
            FTPClient ftpClient = null;
            if(localFile != null){
             try {
              ftpClient = new FTPClient();
              in = new FileInputStream(localFile);
              ftpClient.connect(ip,port);
              if(ftpClient.login(userName, password)){
               ftpClient.enterLocalPassiveMode();
               if(remotePath!=null){
                if(!ftpClient.changeWorkingDirectory(remotePath)){
                 ftpClient.makeDirectory(remotePath);
                 ftpClient.changeWorkingDirectory(remotePath);
                }
               }
               boolean flag= ftpClient.storeFile(localFile.getName(), in);
               log.info("上傳文件成功:" + flag);
              }
             }catch (SocketException e) {
              log.error("ftp上傳文件失敗:", e);
              throw e;
             }catch (IOException e) {
              log.error("ftp上傳文件失敗:", e);
              throw e;
             } finally{
              if(in != null){
               try {
                in.close();
               } catch (IOException e) {
                e.printStackTrace();
               }
              }
              if(ftpClient != null){
               try {
                ftpClient.disconnect();
               } catch (IOException e) {
                e.printStackTrace();
               }
              }
             }
            }
           }

          }

          posted on 2011-01-21 12:01 David1228 閱讀(2698) 評論(0)  編輯  收藏 所屬分類: J2EE

          <2011年1月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關

          Spring相關

          云計算/Linux/虛擬化技術/

          友情博客

          多線程并發編程

          開源技術

          持久層技術相關

          搜索

          •  

          積分與排名

          • 積分 - 359263
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安阳县| 正定县| 云和县| 依兰县| 县级市| 南乐县| 浦江县| 汶川县| 新疆| 阜新市| 安国市| 云梦县| 新和县| 邯郸县| 耿马| 镇沅| 斗六市| 东乌珠穆沁旗| 信宜市| 麟游县| 达孜县| 桂东县| 夹江县| 孟津县| 扬中市| 河西区| 锦屏县| 禹州市| 侯马市| 莫力| 太湖县| 阳原县| 远安县| 旅游| 资阳市| 且末县| 抚松县| 新宁县| 泽库县| 阿拉尔市| 乐清市|