windows系统之间SMB共享文件夹的访问和操作

  • JCIFS使用
  • 示例

前提背景:A系统与B系统的集成,A提交相关数据到B系统,数据格式为XML,XML标签中放着物理文件的访问路径,因A系统不能对外开发共享目录,B系统提供可访问操作的共享路径。

  • 工具 jcifs.jar
  • 获取途径下载地址

JCIFS使用

API中提供了实例说明,慢慢玩。

import jcifs.smb.*;jcifs.Config.setProperty( "jcifs.netbios.wins", "192.168.1.220" );
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password");
SmbFileInputStream in = new SmbFileInputStream("smb://host/c/My Documents/somefile.txt", auth);
byte[] b = new byte[8192];
int n;
while(( n = in.read( b )) > 0 ) {System.out.write( b, 0, n );
}

示例

这里采用了设置相关参数的用法,因为共享机器中用户密码包含@这样不能直接拼接path url。

区别点,从共享那里取文件SmbFileInputStream,向共享那里送文件SmbFileOutputStream

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import jcifs.Config;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;public class SMBUtil {static NtlmPasswordAuthentication auth;static {//先祭天,如果不加,访问时长8秒起步,加快访问共享目录的速度Config.setProperty("jcifs.netbios.wins", "共享目录IP(0.0.0.0)");Config.setProperty("jcifs.netbios.domain", "共享目录所在域");Config.setProperty("jcifs.netbios.username", "共享目录用户名");Config.setProperty("jcifs.netbios.password", "共享目录用户密码");Config.setProperty("jcifs.smb.client.dfs.disabled", "true");System.setProperty("jcifs.smb.client.dfs.disabled", "true");auth = new NtlmPasswordAuthentication("域名", "用户名", "密码");}/*** 从共享目录下获取文件* @param sharedPathURL* @param auth*/public static void smbGet(String sharedPathURL, NtlmPasswordAuthentication auth) {// 共享路径需要处理一下:形如   smb://10.10.10.10/aString url = sharedPathURL.replaceAll("\\\\", "/");SmbFileInputStream fis = null;FileOutputStream fos = null;try {SmbFile smbFile = new SmbFile(url, auth);if (smbFile.isFile()) {fis = new SmbFileInputStream(smbFile);fos = new FileOutputStream(new File(smbFile.getName()));byte[] buff = new byte[1024*1024];int len;while((len = fis.read(buff))!=-1) {fos.write(buff, 0, len);}fos.flush();}else {SmbFile[] listFiles = smbFile.listFiles();for (SmbFile file : listFiles) {fis = new SmbFileInputStream(file);fos = new FileOutputStream(new File(file.getPath()));//这里需要定义文件存储的本地路径byte[] buff = new byte[1024*1024];int len;while((len = fis.read(buff))!=-1) {fos.write(buff, 0, len);}fos.flush();}}} catch (Exception e) {e.printStackTrace();}finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 将本地物理文件上传至共享目录中* @param sharedPathURL 共享目录的访问地址,类似:\\10.10.10.10\a* @param files            需要上传到共享目录的本地文件列表* @param timetamp      在时间戳在共享目录中创建文件夹用来区分记录* @param auth         访问共享目录的认证* @return             文件上传到共享目录之后,需要重新生成路径写入xml中,方便对方访问共享目录中的文件*/public static List<String> smbPut(String sharedPathURL, List<File> files, String timetamp, NtlmPasswordAuthentication auth) {// 共享路径需要处理一下:形如   smb://10.10.10.10/aString url = sharedPathURL.replaceAll("\\\\", "/");List<String> lists = new ArrayList<String>();FileInputStream fis = null;SmbFileOutputStream fos =null;SmbFile folder = null;if (null == files || files.size() == 0) {return null;}try {for (File file : files) {String filename = file.getName();//创建文件夹folder = new SmbFile(url+"/"+timetamp+"/", auth);if(!folder.exists()) folder.mkdirs();//创建文件SmbFile smbFile = new SmbFile(folder, filename);//正常的IO文件复制fis = new FileInputStream(file);fos = new SmbFileOutputStream(smbFile);byte[] buff = new byte[1024*1024];int len = 0;while((len=fis.read(buff))!=-1) {fos.write(buff, 0, len);}fos.flush();}} catch (Exception e) {e.printStackTrace();}finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}try {SmbFile[] smbFiles = folder.listFiles();if (null != smbFiles && smbFiles.length > 0) {for (SmbFile smbFile : smbFiles) {String path = smbFile.getPath();lists.add(path.split(":")[1].replaceAll("/", "\\\\"));}}} catch (SmbException e) {e.printStackTrace();}return lists;}
}

windows系统之间SMB共享文件夹的访问和操作相关推荐

  1. Linux主机与Windows虚拟机之间创建共享文件夹

    Linux主机与Windows虚拟机之间创建共享文件夹 概述 该篇博客是在Linux samba配置的基础上,进行Linux主机与Windows虚拟机之间配置共享文件夹的教程.该博客是在一次实际成功的 ...

  2. CentOS7系统之间设置共享文件夹

    说明:有两台服务器,ip地址分别为:192.168.1.1和192.168.1.2 现将1服务器的文件夹/usr/server/tomcatFile/webapps/bidFile/共享给2服务器 ( ...

  3. 如何在unbuntu虚拟机和主机(windows)之间建立共享文件夹

    一.打开Vmware station启动ubuntu虚拟机,点击"虚拟机"->"设置" 二.点击"选项"->"共享文件 ...

  4. Linux系统与Windows系统之间共享文件资源

    samba实现文件共享 Linux系统与Windows系统之间共享文件资源,小文件可以使用lrzsz,大文件可以使用samba. samba安装配置 环境说明:因为是在内网使用,直接关闭selinux ...

  5. 计算机为什么无法访问公司共享文件夹,win10系统共享文件夹无法访问的详细方案...

    有关win10系统共享文件夹无法访问的操作方法想必大家有所耳闻.但是能够对win10系统共享文件夹无法访问进行实际操作的人却不多.其实解决win10系统共享文件夹无法访问的问题也不是难事,小编这里提示 ...

  6. win7系统电脑共享文件夹别人访问不了怎么办

    win7系统电脑共享文件夹别人访问不了怎么办 由于工作的需要,经常需要进行文件夹的共享,方便大家查看文件或图片.win7系统设置好了两台电脑的文件共享之后,发现别人访问不了自己电脑文件夹,针对此疑问, ...

  7. win10不能访问服务器共享文件夹权限,win10系统共享文件夹无法访问的解决方法...

    很多小伙伴都遇到过win10系统共享文件夹无法访问的情况,想必大家都遇到过win10系统共享文件夹无法访问的情况吧,那么应该怎么处理win10系统共享文件夹无法访问呢?我们依照进入的计算机管理,点击服 ...

  8. 本地计算机无法设置共享文件夹,win10系统下共享文件夹无法访问的解决方法

    最近有不少win10系统用户到本站反馈说碰到这样一个问题,就是要访问共享文件夹的时候发现无法访问,该怎么办呢,本文就给大家讲解一下win10系统下共享文件夹无法访问的解决方法供大家参考. 1.检查共享 ...

  9. win10共享服务器有的文件夹打不开,手把手教你解决win10系统共享文件夹无法访问的设置方案....

    很多人都懂一些简单的电脑系统问题的解决方案,但是win10系统共享文件夹无法访问的情况,想必大家都遇到过win10系统共享文件夹无法访问的情况吧,那么应该怎么处理win10系统共享文件夹无法访问呢?我 ...

最新文章

  1. boost::current_exception_cast的用法测试程序
  2. 对数据科学家来说最重要的算法和统计模型
  3. 百度地图检索以及路径规划
  4. oracle11g的用户名是什么,oracle11g默认用户名和密码
  5. ios App开发的基本流程
  6. 设置居中_安卓手机时间怎么显示在中间 时间居中设置教程
  7. springMVC工作过程
  8. 决策树分箱-特征工程之数据离散化处理-基于python实现
  9. .net web 应用程序C#
  10. 绕过微软WGA正版验证(蓝色五角星)的几则技巧
  11. 巴特沃斯滤波器 python代码
  12. pod构建的ios版本引发 react-native-safe-area-context RN项目的pod-install构建异常
  13. MemCache详解
  14. For 循环优化,提升效率
  15. 销售数据分析软件——让你不做糊涂账
  16. 货郎问题与计算复杂性
  17. 微信小程序的各种功能
  18. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
  19. android模拟键盘自动输入,【求助】如何让接码平台的验证码自动输入到安卓模拟器的编辑框中...
  20. 生产者/消费者模式的理解及实现

热门文章

  1. Qt实现Windows服务程序
  2. DEFORM-GAN:AN UNSUPERVISED LEARNING MODEL FOR DEFORMABLE REGISTRATION
  3. html输入页美化模板,html页面输入框input的美化
  4. win7x64安裝flashCS5启动时由于CS LIVE总是无故停止响应的解决备忘
  5. java半碳前叉结构,山地车避震前叉功能及原理分类详解(图文)
  6. 直播搭建主播pk,如何实现无缝切换?
  7. (转)请问车辆违规记录在哪个网站上可以查到?
  8. MySQL排查篇:该如何定位并解决线上突发的Bug与疑难杂症?
  9. 中国移动高举Linux大旗阔步向前
  10. 爬虫01-requests的基本用法