本篇文章主要介绍了Java读写Windows共享文件夹的方法实例,具有一定的参考价值,有兴趣的同学可以了解一下。
项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片、文件等。那么如何使用Java读写Windows共享文件夹呢?
Java可以使用JCIFS框架对Windows共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹。
JCIFS的网址:
http://jcifs.samba.org/
JCIFS是使用纯Java开发的一个开源框架,通过smb协议访问远程文件夹。该框架同时支持Windows共享文件夹和Linux共享文件夹,不过,Linux共享文件夹需要安装Samba服务软件(官网:
http://www.samba.org/
)。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
本文主要学习一下使用Java访问Windows共享文件夹的方法。
首先找一台Windows机器,在任意位置创建文件夹:sharedFolder,并设置为共享,设置共享用户名:share,密码:admin。
(Windows7下设置共享文件夹方法:Windows7下设置共享文件夹方法:
https://www.jb51.net/os/windows/78034.html
)
不论是Windows还是Linux的共享文件夹,使用Java smb访问共享文件夹的代码都是一样的,只是Windows与Linux配置共享文件夹的方式不一样。
测试代码如下:
InputStream in = null;
OutputStream out = null;
try {
//获取图片
File localFile = new File("C:/testjpg");
String remotePhotoUrl = "smb://share:admin@11/sharedFolder/"; //存放图片的共享目录
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_");
SmbFile remoteFile = new SmbFile(remotePhotoUrl + "/" + fmtformat(new Date()) + localFilegetName());
remoteFileconnect(); //尝试连接
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
byte[] buffer = new byte[4096];
int len = 0; //读取长度
while ((len = inread(buffer, 0, bufferlength)) != -1) {
outwrite(buffer, 0, len);
outflush(); //刷新缓冲的输出流
catch (Exception e) {
String msg = "发生错误:" + egetLocalizedMessage();
Systemoutprintln(msg);
finally {
try {
if(out != null) {
outclose();
if(in != null) {
inclose();
catch (Exception e) {}
以上代码中,使用了JCIFS框架提供的SmbFile类,这个类和Java的File类比较相似,使用这个类的对象,可以处理远程文件的读写。使用File对象读取本地文件,然后使用SmbFile对象写入远程文件。SmbFile的connect()方法可以尝试连接远程文件夹,如果账号或密码错误,将抛出连接异常。
当下载远程文件时,使用SmbFile对象读取远程文件即可,代码如下:
InputStream in = null ;
ByteArrayOutputStream out = null ;
try {
//创建远程文件对象
String remotePhotoUrl = "smb://share:admin@11/sharedFolder/testjpg";
SmbFile remoteFile = new SmbFile(remotePhotoUrl);
remoteFileconnect(); //尝试连接
//创建文件流
in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
out = new ByteArrayOutputStream((int)remoteFilelength());
//读取文件内容
byte[] buffer = new byte[4096];
int len = 0; //读取长度
while ((len = inread(buffer, 0, bufferlength)) != - 1) {
outwrite(buffer, 0, len);
outflush(); //刷新缓冲的输出流
return outtoByteArray();
catch (Exception e) {
String msg = "下载远程文件出错:" + egetLocalizedMessage();
Systemoutprintln(msg);
finally {
try {
if(out != null) {
outclose();
if(in != null) {
inclose();
catch (Exception e) {}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新列的解决办法
2021-12-12
Java中实现两个线程交替运行的方法
2021-12-12
MybatisPlus分页排序查询字段带有下划线的坑及解决
2021-12-12
Spring boot通过切面,实现超灵活的注解式数据校验过程
2021-12-12
mybatisplus @Select注解中拼写动态sql异常问题的解决
2021-12-12
Java如何实现读取txt文件内容并生成Word文档
2021-12-12
详细解读Java Spring AOP
2021-12-12
mybatis新增save结束后自动返回主键id详解
2021-12-12
美国设下计谋,用娘炮文化重塑日本,已影响至中国
2021-11-19
时空伴随者是什么意思?时空伴随者介绍
2021-11-09
工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
2021-11-05
2022年放假安排出炉:五一连休5天 2022年所有节日一览表
2021-10-26
电脑版
-
返回首页
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号