zoukankan      html  css  js  c++  java
  • 使用JCIFS获取远程共享文件

    package com.jadyer.util; 
     
    import java.io.File; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
     
    import jcifs.smb.SmbFile; 
    import jcifs.smb.SmbFileInputStream; 
     
    /**
     * 使用JCIFS获取远程共享文件
     * @see 关于jcifs的介绍,网上有一大片,这里谈到的远程文件指的是网络共享文件
     * @see JCIFS官网为http://jcifs.samba.org/,以后准备写成一个工具类,故命名JCifsUtil
     * @see 据网络所说:JCIFS比较适用于单域环境,多域环境就会很麻烦(本人尚未验证),详见http://jusescn.iteye.com/blog/757475
     * @create Apr 22, 2013 11:48:15 PM
     * @author 玄玉<http://blog.csdn.net/jadyer>
     */ 
    public class JCifsUtil { 
        public static void main(String[] args) { 
            getRemoteFile("jadyer", "myJavaSE", "192.168.8.2/我的测试用例/", "D:/mylocal/"); 
            //getRemoteFile("jadyer", "myJavaSE", "192.168.8.2/我的测试用例/平安银行接入.et", "D:/mylocal/");  
            System.out.println(System.getenv("JAVA_HOME")); 
        } 
         
         
        /**
         * 拷贝远程文件到本地目录
         * @param smbFile        远程SmbFile
         * @param localDirectory 本地存储目录,本地目录不存在时会自动创建,本地目录存在时可自行选择是否清空该目录下的文件,默认为不清空
         * @return boolean 是否拷贝成功
         */ 
        private static boolean copyRemoteFile(SmbFile smbFile, String localDirectory) { 
            SmbFileInputStream in = null; 
            FileOutputStream out = null; 
            try { 
                File[] localFiles = new File(localDirectory).listFiles(); 
                if(null == localFiles){ 
                    //目录不存在的话,就创建目录  
                    //new File("D:/aa/bb.et").mkdirs()会在aa文件夹下创建一个名为bb.et的文件夹  
                    new File(localDirectory).mkdirs(); 
                }else if(localFiles.length > 0){ 
    //              for(File file : localFiles){  
    //                  //清空本地目录下的所有文件  
    //                  //new File("D:/aa/bb.et").delete()会删除bb.et文件,但aa文件夹还存在  
    //                  file.delete();  
    //              }  
                } 
                in = new SmbFileInputStream(smbFile); 
                out = new FileOutputStream(localDirectory + smbFile.getName()); 
                byte[] buffer = new byte[1024]; 
                int len = -1; 
                while((len=in.read(buffer)) != -1){ 
                    out.write(buffer, 0, len); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
                return false; 
            } finally { 
                if(null != out){ 
                    try { 
                        out.close(); 
                    } catch (IOException e) { 
                        e.printStackTrace(); 
                    } 
                } 
                if(null != in){ 
                    try { 
                        in.close(); 
                    } catch (IOException e) { 
                        e.printStackTrace(); 
                    } 
                } 
            } 
            return true; 
        } 
         
         
        /**
         * 获取远程文件
         * @param remoteUsername 远程目录访问用户名
         * @param remotePassword 远程目录访问密码
         * @param remoteFilepath 远程文件地址,该参数需以IP打头,如'192.168.8.2/aa/bb.java'或者'192.168.8.2/aa/',如'192.168.8.2/aa'是不对的
         * @param localDirectory 本地存储目录,该参数需以'/'结尾,如'D:/'或者'D:/mylocal/'
         * @return boolean 是否获取成功
         */ 
        public static boolean getRemoteFile(String remoteUsername, String remotePassword, String remoteFilepath, String localDirectory) { 
            boolean isSuccess = false; 
            if(remoteFilepath.startsWith("/") || remoteFilepath.startsWith("\")){ 
                return isSuccess; 
            } 
            if(!(localDirectory.endsWith("/") || localDirectory.endsWith("\"))){ 
                return isSuccess; 
            } 
            try { 
                SmbFile smbFile = new SmbFile("smb://" + remoteUsername + ":" + remotePassword + "@" + remoteFilepath); 
                if(smbFile.isDirectory()){ 
                    for(SmbFile file : smbFile.listFiles()){ 
                        isSuccess = copyRemoteFile(file, localDirectory); 
                    } 
                }else if(smbFile.isFile()){ 
                    isSuccess = copyRemoteFile(smbFile, localDirectory); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
            return isSuccess; 
        } 
  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/firstdream/p/6247915.html
Copyright © 2011-2022 走看看