java 权限访问共享文件夹_在Java程序中读写windows共享文件夹
摘要 使用Java通过JCIFS框架读写共享文件夹,使用SMB协议,并支持域认证。
项目常常需要有访问共享文件夹的需求,例如读取共享文件夹存储的视频、照片和PPT等文件。那么如何使用Java读写Windows共享文件夹呢?
使用Java访问拥有全部读写权限的共享文件夹比较简单,和普通的目录没有什么区别。但是,如果从Linux服务器访问一个windows服务器上需要用户名和密码验证的共享文件夹,就需要一点点小技巧了。这里介绍一个开源的库JCIFS,他可以轻松满足此需求。
JCIFS是使用Java语言开发的一款开源框架,通过SMB协议访问远程共享文件夹,就像访问本地文件夹一样,简简单单。她同时支持Windows和Linux共享文件夹,不过,Linux共享文件夹需要安装Samba服务软件(官网:http://www.samba.org/)。
另外,通过挂载该共享文件夹到Linux服务器下也可以实现,此时不需要借助SMB协议,对此,这里不做介绍,感兴趣的童鞋可以去问问度娘。
言归正传,maven依赖如下:
org.samba.jcifs
jcifs
1.3.3
SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
代码示例:
importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjcifs.smb.NtlmPasswordAuthentication;importjcifs.smb.SmbFile;importjcifs.smb.SmbFileInputStream;importjcifs.smb.SmbFileOutputStream;public classSmbFileUtil {private static Logger log = LoggerFactory.getLogger(SmbFileUtil.class);private static String USER_DOMAIN = "yourDomain";private static String USER_ACCOUNT = "yourAccount";private static String USER_PWS = "yourPassword";public static void main(String[] args) throwsException {//remoteUrl 格式示例 【smb://132.20.2.33/CIMPublicTest/】//目录
String shareDir = "smb:// 132.20.2.33/CIMPublicTest/";
listFiles(shareDir);
}/*** @Title listFiles
* @Description 遍历指定目录下的文件
* @date 2019-01-11 09:56*/
private static void listFiles(String shareDirectory) throwsException {long startTime =System.currentTimeMillis();//域服务器验证
NtlmPasswordAuthentication auth = newNtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
USER_PWS);
SmbFile remoteFile= newSmbFile(shareDirectory, auth);
log.info("远程共享目录访问耗时:【{}】", System.currentTimeMillis() -startTime);if(remoteFile.exists()) {
SmbFile[] files=remoteFile.listFiles();
remoteFile.listFiles(shareDirectory);for(SmbFile f : files) {
log.info(f.getName());
}
}else{
log.info("文件不存在");
}
}
}
NtlmPasswordAuthentication类用于域认证,需要三个参数, 第一个是域名,如果没有,就赋值null, 第二个是用户名,第三个是密码。下面列举SMB协议的两个应用场景。SmbFile类和Java的File类十分相似,使用其对象可以处理远程共享文件的读写。
/*** @Title smbGet
* @Param shareUrl 共享目录中的文件路径,如smb://132.20.2.33/CIMPublicTest/eg.txt
* @Param localDirectory 本地目录,如tempStore/smb*/
public static void smbGet(String shareUrl, String localDirectory) throwsException {
NtlmPasswordAuthentication auth= newNtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
USER_PWS);
SmbFile remoteFile= newSmbFile(shareUrl, auth);if (!remoteFile.exists()) {
log.info("共享文件不存在");return;
}//有文件的时候再初始化输入输出流
InputStream in = null;
OutputStream out= null;
log.info("下载共享目录的文件 shareUrl 到 localDirectory");try{
String fileName=remoteFile.getName();
File localFile= new File(localDirectory + File.separator +fileName);
File fileParent=localFile.getParentFile();if (null != fileParent && !fileParent.exists()) {
fileParent.mkdirs();
}
in= new BufferedInputStream(newSmbFileInputStream(remoteFile));
out= new BufferedOutputStream(newFileOutputStream(localFile));byte[] buffer = new byte[1024];while (in.read(buffer) != -1) {
out.write(buffer);
buffer= new byte[1024];
}
out.flush();//刷新缓冲区输出流
}catch(Exception e) {
e.printStackTrace();
}finally{
out.close();
in.close();
}
}/***
* @Title smbPut
* @Description 向共享目录上传文件
* @Param shareDirectory 共享目录
* @Param localFilePath 本地目录中的文件路径
* @date 2019-01-10 20:16*/
public static voidsmbPut(String shareDirectory, String localFilePath) {
InputStream in= null;
OutputStream out= null;try{
File localFile= newFile(localFilePath);
String fileName=localFile.getName();
SmbFile remoteFile= new SmbFile(shareDirectory + "/" +fileName);
in= new BufferedInputStream(newFileInputStream(localFile));
out= new BufferedOutputStream(newSmbFileOutputStream(remoteFile));byte[] buffer = new byte[1024];while (in.read(buffer) != -1) {
out.write(buffer);
buffer= new byte[1024];
}
out.flush();
}catch(Exception e) {
e.printStackTrace();
}finally{try{
out.close();
in.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
java 权限访问共享文件夹_在Java程序中读写windows共享文件夹相关推荐
- java权限控制是什么_论Java访问权限控制的重要性
人在什么面前最容易失去抵抗力? 欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135 本群提供免费的学习指导 架构资料 以及免费的解答 不懂得问题都可以在本群提出来 之后还会 ...
- outlook 脱机文件夹_在Outlook 2007中使用搜索文件夹节省时间
outlook 脱机文件夹 This article was written by MysticGeek, a tech blogger at the How-To Geek Blogs. 本文由Ho ...
- 天正lisp文件夹_如何在AutoCAD中从Windows资源管理器中打开图形文件夹位置
涵盖的产品和版本 AutoCAD 2002, AutoCAD 2004, AutoCAD 2005, AutoCAD 2006, AutoCAD 2007, AutoCAD 2008, AutoCAD ...
- Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- 微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-翟东平-专题视频课程...
微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-2445人已学习 课程介绍 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识. 微信小 ...
- 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发
微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...
- java 设置pdf页面大小_通过Java实现对PDF页面的详细设置
前言 下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小.页边距.纸张方向.页面旋转等.这里有如下多种页面大小尺寸可供选择: 同时,设置文档内容旋转时,可支持如下角度 ...
- 人工智能 java 坦克机器人系列: 强化学习_人工智能 Java 坦克机器人系列: 强化学习...
人工智能 Java 坦克机器人系列: 强化学习 发表于:2007-05-24来源:作者:点击数: 本文中,我们将使用强化学习来实现一个机器人.使用强化学习能创建一个自适应的战斗机器人.这个机器人能在战 ...
- 消除WSL中ls Windows文件夹时背光配色的方法
消除WSL中ls Windows文件夹时背光配色的方法 产生原因 首先,Linux中ls命令是自带配色的,对于某些文件夹是绿色背景色块,其实是一种权限提示,即777权限.绿色表示不安全,当其他人的权限 ...
最新文章
- 深入理解Eureka之源码解析
- 敏捷、精益、六西格玛之间到底有什么差异?
- [原创]关于javax.servlet.ServletException: File [/loginController/getVerifCode.jsp] not found异常 解决方案
- OpenCV4 DNN模块 Python APIs
- cdoj 1070 秋实大哥打游戏 带权并查集
- SAP Cloud for Customer(C4C)和微信集成系列教程
- behavior php,behavior.php
- git 配置免密登陆
- can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法
- 关于python_关于python的基础知识
- 智能助手被指侵犯用户隐私,美三大科技巨头或面临调查;传小米已解散其VR头显Mi VR团队;特斯拉成立反欺诈部门……...
- 计算机应用无法打开,双击磁盘无法打开?_计算机应用_邹志强个人网站—(www.zouzhiqiang.com)...
- 内核并发控制---互斥量(来自网易)
- 【Flink】FileNotFoundException: JAR file does not exist: -ynm -yst
- HTML5移动Web开发指南
- 二十五、K8s系统强化1- 系统安全与apparmor
- 有了证件照大师 轻松在ps中做证件照
- 控制台命令调试(bt)
- “华为杯”第十七届中国研究生数学建模竞赛2020 —— B题
- vue仿微博评论回复_vue-微博评论
热门文章
- 硬件驱动为什么要有WHQL数字签名
- Pano2VR制作全景漫游
- 跨语言词嵌入模型调研报告
- 安卓手机怎么设置蓝牙耳机弹窗动画_AirPods Pro 搭配安卓一个月深度体验
- 虚拟机安装OpenGauss企业版
- SpringBoot:yml文件详解
- sht20中写用户寄存器_哪位帮忙看看下,程序读取SHT20 的温度时就不行,无ACK反馈了...
- Geos库学习之(一)——Geos库介绍和编译
- 一套基于java的开源车牌识别算法
- python语言的多行注释以什么开头和结尾_python多行注释