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; 
    } 

使用JCIFS获取远程共享文件相关推荐

  1. 剑走偏锋--使用WMI获取远程计算机进程程序集中查毒病毒打造内网安全环境

    剑走偏锋-使用WMI获取远程计算机进程程序 集中查毒病毒打造内网安全环境 作者:高玉涵 时间:2019.04.1815:45 博客:blog.csdn.net/cg_i 作者背景环境参见: <由 ...

  2. nodejs读取远程共享文件

    最近接到了一个任务,要在nodejs后台读取一个非本地的远程文件,经过一阵研究,找到了方法.发现网上对这件事的文章比较少,就写了一下方法. 1.将一个远程电脑上的文件夹设定为共享文件夹.在win10上 ...

  3. 获取远程网卡MAC地址

    出自: http://blog.joycode.com/liuhuimiao/ 朋友mingal急问我有关获取远程网卡MAC地址的ASP.net实现.我一开始以为是获取本机MAC地址,说了几种方法给他 ...

  4. PHP 通过fsockopen函数获取远程网页源码

    最新PHP 通过fsockopen函数获取远程网页源码 以下是三零网为大家整理的最新PHP 通过fsockopen函数获取远程网页源码的文章,希望大家能够喜欢! 通过该函数可以获取指定端口的页面源码, ...

  5. 获取远程数据本地缓存到PHP数组

    为什么80%的码农都做不了架构师?>>>    <?php /* 本地缓存文件名称 */ $tempfile = "sms.php"; $smsdata = ...

  6. 解决paramiko获取远程脚本延时返回数据的问题

    解决paramiko获取远程脚本延时返回数据的问题 参考文章: (1)解决paramiko获取远程脚本延时返回数据的问题 (2)https://www.cnblogs.com/liushi-Oscar ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )

    文章目录 一.获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 二.从 /proc/pid/maps 文件中获取 指定 进程 中的 /system/l ...

  8. java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用

    闲来没事,就做做,程序还是要多写才好@ 原理不说,文件方面及I/O方面,去BAIDU一下就知道,断点续传的原理也很简单,就是在原来已经下载的基础之上继续下载就可以了,用到了这么关键的一句:urlc.s ...

  9. 用WMI获取远程机器操作系统的详细信息

    使用WMI获取远程机器操作系统的详细信息 大杂烩-.NET 代码主题部分的OperatingSystem类,是使用工具(Management (WMI) Extensions for Visual S ...

最新文章

  1. selenium+Headless Chrome实现不弹出浏览器自动化登录
  2. LAMP编译安装(一)——安装Apache2.4
  3. linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法
  4. 用w32tm设置服务器时间同步
  5. 【Elasticsearch】玩转 Elasticsearch 7.8 的 SQL 功能
  6. 工作流牛人 Jan Mendling
  7. mysql 所有外键_mysql中的外键
  8. AT指令集及其通信测试方式
  9. 点餐小程序购物车效果实现
  10. webrtc rtt 计算
  11. 雏鸟(1)--Foundation
  12. 用python模拟一个文本浏览器来抓取网页
  13. 下载学习通上没有下载权限的文件
  14. MFC中图片背景透明色问题
  15. SpringMVC(7)——类型转换器Converter
  16. 18 What is the __dict__.__dict__attribute of a Python class
  17. babylonjs 分部加载模型_17 Babylonjs入门进阶 使用场景加载器加载glTF,OBJ,STL模型...
  18. 【PyTorch基础教程30】DSSM双塔模型(线上召回 | 模型更新)
  19. miniui实现表格中行的上下移动
  20. 金仓数据库KingbaseES安全指南--5.2. 数据完整性保护

热门文章

  1. showModalDialog 页面上GridView的分页问题
  2. varchar和nvarchar的区别
  3. RMAN-03002、RMAN-06059
  4. 06-老马jQuery教程-jQuery高级
  5. AMF3通讯协议实例
  6. slice,substr和substring的区别
  7. jQuery Ajax 实例 ($.ajax、$.post、$.get)
  8. Codeigniter 利用加密Key(密钥)的对象注入漏洞
  9. configure,pkg-config和PKG_CONFIG_PATH
  10. 【中文】Joomla1.7扩展介绍之Kunena(强大的论坛)