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

 更新时间:2016年11月22日 09:44:02   作者:海涛zht666  
本篇文章主要介绍了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) {} 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Go Java算法之字符串中第一个唯一字符详解

    Go Java算法之字符串中第一个唯一字符详解

    这篇文章主要为大家介绍了Go Java算法之字符串中第一个唯一字符详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 使用SpringBoot生成war包的流程步骤

    使用SpringBoot生成war包的流程步骤

    一般情况下,在SpringBoot项目开发完成进行服务器部署时,都是打成JAR包进行部署运行的,但是在有些情况下也需要将其打成War包使用Tomcat进行部署,本篇文章就简单介绍一下SpringBoot如何打成War包,需要的朋友可以参考下
    2024-10-10
  • Java 实战范例之校园二手市场系统的实现

    Java 实战范例之校园二手市场系统的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+mysql+maven+tomcat实现一个校园二手市场系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 通过FeignClient如何获取文件流steam is close问题

    通过FeignClient如何获取文件流steam is close问题

    这篇文章主要介绍了通过FeignClient如何获取文件流steam is close问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 基于resty orm的ActiveRecord操作数据指南

    基于resty orm的ActiveRecord操作数据指南

    这篇文章主要为大家介绍了基于resty orm的ActiveRecord操作数据指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Java发送form-data请求的实例代码

    Java发送form-data请求的实例代码

    在Java中发送form-data请求,可以使用Apache HttpClient或OkHttp这样的HTTP客户端库来发送请求,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • SpringBoot+Ajax+redis实现隐藏重要接口地址的方法

    SpringBoot+Ajax+redis实现隐藏重要接口地址的方法

    这篇文章主要介绍了SpringBoot+Ajax+redis实现隐藏重要接口地址,本篇文章主要讲诉使用SpringBoot项目配合Ajax和redis实现隐藏重要接口地址,这里我以隐藏秒杀地址为例,需要的朋友可以参考下
    2024-03-03
  • 解决idea报错 Connot resolve column 的问题

    解决idea报错 Connot resolve column 的问题

    这篇文章主要介绍了解决idea报错 Connot resolve column 的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Nacos源码之注册中心的实现详解

    Nacos源码之注册中心的实现详解

    这篇文章主要为大家介绍了Nacos源码之注册中心的实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 不使用他人jar包情况下优雅的进行dubbo调用详解

    不使用他人jar包情况下优雅的进行dubbo调用详解

    这篇文章主要为大家介绍了不使用他人jar包情况下优雅的进行dubbo调用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论