zoukankan      html  css  js  c++  java
  • JAVA-FTP批量大文件传输

    FTP的具体使用
         FTP是一种网络协议,用于进行不同服务器主机之间的文件传输,或者简单地说两台不同IP的机器之间的文件传输。在java中我们什么时候需要用到FTP文件传输呢?比如两台服务器的互动,将我这台机器上的资源文件传输给你,让你也能拥有他。
         FTP用起来其实也是一个相当简单,但是却非常实用的技术。下面就贴出FTP的源代码和注释,让大家去理解FTP的用法。
          ------------------------------------------FTPbean,也可以用配置文件来搞定------------------------------------------------
     
    --------------------------------------------------over,请自行生成get/set方法-----下面是工具类----------------------------
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    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 {
        
        private static Logger logger=Logger.getLogger(FtpUtil.class);
        
        private static FTPClient ftp;
        
        /**
         * 获取ftp连接
         * @param f
         * @return
         * @throws Exception
         */
        public static boolean connectFtp(Ftp f) throws Exception{
            ftp=new FTPClient();
            boolean flag=false;
            int reply;
            if (f.getPort()==null) {
                ftp.connect(f.getIpAddr(),21);
            }else{
                ftp.connect(f.getIpAddr(),f.getPort());
            }
            ftp.login(f.getUserName(), f.getPwd());
            System.out.println("dengu chengg");
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            reply = ftp.getReplyCode();      
            if (!FTPReply.isPositiveCompletion(reply)) {      
                  ftp.disconnect();      
                  return flag;      
            }      
            ftp.changeWorkingDirectory(f.getPath());
            System.out.println(f.getPath());
            flag = true;      
            return flag;
        }
        
        /**
         * 关闭ftp连接
         */
        public static void closeFtp(){
            if (ftp!=null && ftp.isConnected()) {
                try {
                    ftp.logout();
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
        /**
         * ftp上传文件
         * @param f
         * @throws Exception
         */
        public static void upload(File f) throws Exception{        
            if (f.isDirectory()) {
                ftp.makeDirectory(
                    new String(f.getName().getBytes("GBK"), "ISO-8859-1"));
                ftp.changeWorkingDirectory(
                    new String(f.getName().getBytes("GBK"), "ISO-8859-1"));
                String[] files=f.list();
                for(String fstr : files){
                    File file1=new File(f.getPath()+"/"+fstr);
                    if (file1.isDirectory()) {
                        upload(file1);
                        ftp.changeToParentDirectory();
                    }else{
                        File file2=new File(f.getPath()+"/"+fstr);
                        FileInputStream input=new FileInputStream(file2);
                        ftp.storeFile(
                        new String(file2.getName().getBytes("GBK"), 
                                "ISO-8859-1"),input);
                        input.close();
                    }
                }
            }else{
                File file2=new File(f.getPath());
                FileInputStream input=new FileInputStream(file2);
                ftp.storeFile(file2.getName(),input);
                input.close();
            }
        }
        
        /**
         * 下载链接配置
         * @param f
         * @param localBaseDir 本地目录
         * @param remoteBaseDir 远程目录
         * @throws Exception
         */
        public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir )
                throws Exception{
            if (FtpUtil.connectFtp(f)) {
                
                try { 
                    FTPFile[] files = null; 
                    boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir); 
                    if (changedir) { 
                        ftp.setControlEncoding("GBK"); 
                        files = ftp.listFiles(); 
                        for (int i = 0; i < files.length; i++) { 
                            try{ 
                                downloadFile(files[i], localBaseDir, remoteBaseDir); 
                            }catch(Exception e){ 
                                logger.error(e); 
                                logger.error("<"+files[i].getName()+">下载失败"); 
                            } 
                        } 
                    } 
                } catch (Exception e) { 
                    logger.error(e); 
                    logger.error("下载过程中出现异常"); 
                } 
            }else{
                logger.error("链接失败!");
            }
            
        }
        
        
        /** 
         * 
         * 下载FTP文件 
         * 当你需要下载FTP文件的时候,调用此方法 
         * 根据<b>获取的文件名,本地地址,远程地址</b>进行下载 
         * 
         * @param ftpFile 
         * @param relativeLocalPath 
         * @param relativeRemotePath 
         */ 
        private  static void downloadFile(
            FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) { 
            if (ftpFile.isFile()) {
                if (ftpFile.getName().indexOf("?") == -1) { 
                    OutputStream outputStream = null; 
                    try { 
                        File locaFile= new File(relativeLocalPath+ ftpFile.getName()); 
                        //判断文件是否存在,存在则返回 
                        if(locaFile.exists()){ 
                            return; 
                        }else{ 
                            outputStream = new FileOutputStream(
                                    relativeLocalPath+ ftpFile.getName()); 
                            ftp.retrieveFile(ftpFile.getName(), outputStream); 
                            outputStream.flush(); 
                            outputStream.close(); 
                        } 
                    } catch (Exception e) { 
                        logger.error(e);
                    } finally { 
                        try { 
                            if (outputStream != null){ 
                                outputStream.close(); 
                            }
                        } catch (IOException e) { 
                           logger.error("输出文件流异常"); 
                        } 
                    } 
                } 
            } else { 
                String newlocalRelatePath = relativeLocalPath + ftpFile.getName(); 
                String newRemote = new String(relativeRemotePath+ ftpFile.getName()
                .toString()); 
                File fl = new File(newlocalRelatePath); 
                if (!fl.exists()) { 
                    fl.mkdirs(); 
                } 
                try { 
                    newlocalRelatePath = newlocalRelatePath + '/'; 
                    newRemote = newRemote + "/"; 
                    String currentWorkDir = ftpFile.getName().toString(); 
                    boolean changedir = ftp.changeWorkingDirectory(currentWorkDir); 
                    if (changedir) { 
                        FTPFile[] files = null; 
                        files = ftp.listFiles(); 
                        for (int i = 0; i < files.length; i++) { 
                            downloadFile(files[i], newlocalRelatePath, newRemote); 
                        } 
                    } 
                    if (changedir){
                        ftp.changeToParentDirectory(); 
                    } 
                } catch (Exception e) { 
                    logger.error(e);
                } 
            } 
        } 
    
        
        public static void main(String[] args) throws Exception{  
                Ftp f=new Ftp();
                f.setIpAddr("192.168.0.**");
                f.setUserName("username");
                f.setPwd("password");
                FtpUtil.connectFtp(f);
                String pathx = "D:\1cc3bfc2694544809499fd39d4984457";    
                //可以是文件夹,也可以是文件        
                    File file = new File(pathx);         
                         FtpUtil.upload(file);//把文件上传在ftp上                     
                    //FtpUtil.startDown(f, "e:/",  "/xxtest");//下载ftp文件测试
                    ftp.changeWorkingDirectory("/");
                    System.out.println("ok");
        }                  
                
    }
     
  • 相关阅读:
    echarts 报表使用
    Eclipse Java注释模板设置详解
    简单实现支付密码输入框 By HL
    一个label 混搭不同颜色,不同字体的文字.. by 徐
    有关MVC设计模式 #DF
    自定义粘贴板-陈鹏
    TableView 常用技巧与功能详解
    ios 类别和扩展-赵小波
    推荐一本书--《浪潮之巅》(完整版的哦)----董鑫
    iOS block的用法 by -- 周傅琦君
  • 原文地址:https://www.cnblogs.com/tohxyblog/p/6533322.html
Copyright © 2011-2022 走看看