Java读写Windows共享文件夹的方法实例

作者:海涛zht666 时间:2022-10-02 02:25:45 

项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片、文件等。那么如何使用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) {}
}

来源:http://blog.csdn.net/zht666/article/details/27079995

标签:java,读写,共享文件
0
投稿

猜你喜欢

  • Java 判断实体对象及所有属性是否为空的操作

    2022-12-06 14:32:07
  • SpringMVC实现数据绑定及表单标签

    2022-03-24 18:06:47
  • Spring MVC 学习 之 - URL参数传递详解

    2022-03-04 22:05:12
  • java8中:: 用法示例(JDK8双冒号用法)

    2023-11-25 06:21:21
  • Android 中 EventBus 的使用之多线程事件处理

    2021-09-14 13:34:12
  • Java内存区域与内存溢出异常详解

    2022-09-10 17:01:19
  • C# 调用C++写的dll的实现方法

    2022-10-25 11:36:56
  • Java HtmlParse提取标签中的值操作

    2021-10-07 04:43:10
  • SpringBoot @Scope与@RefreshScope注解使用详解

    2022-11-13 17:52:44
  • SpringBoot2之PUT请求接收不了参数的解决方案

    2023-08-23 01:32:07
  • java实现简单的验证码功能

    2023-08-06 09:21:44
  • Java注释代码执行方法解析

    2023-09-28 00:16:01
  • Win10下C# DateTime出现星期几问题的解决方法

    2023-01-12 16:42:04
  • Android基于开源项目xutils3实现下载

    2023-05-06 06:24:15
  • spring boot starter actuator(健康监控)配置和使用教程

    2021-07-29 06:24:18
  • Android实现自定义的卫星式菜单(弧形菜单)详解

    2023-03-03 14:16:51
  • Android自定义广播接收

    2023-04-30 09:39:31
  • 基于动态修改App.Config与web.Config的使用详解

    2021-07-19 12:09:27
  • springboot自定义starter方法及注解实例

    2022-11-02 10:52:08
  • C# 实现TXT文档转Table的示例代码

    2022-04-23 07:47:52
  • asp之家 软件编程 m.aspxhome.com