目录

  • JCIFS 介绍
  • SMB协议
  • 设置共享文件夹(这里我们选择有密码的方式进行共享)
    • 是否设置密码
  • 创建 smb 协议
  • 测试
  • 使用代码将文件夹里的文件下载到本地

项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片、文件等。

那么如何使用 Java 读写 Windows 共享文件夹呢?

Java 可以使用 JCIFS 框架对 Windows 共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹。

JCIFS的网址: http://jcifs.samba.org/

JCIFS 介绍

JCIFS 是使用纯 Java 开发的一个开源框架,通过 smb 协议访问远程文件夹。

该框架同时支持 Windows 共享文件夹和 Linux 共享文件夹,不过,Linux 共享文件夹需要安装 Samba 服务软件。

(官网:http://www.samba.org/)。

SMB协议

SMB 协议(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

设置共享文件夹(这里我们选择有密码的方式进行共享)

  1. 创建一个文件夹;
  2. 文件夹「右键属性」点击共享;
  3. 选中的 “everyone” 选项,点击添加;
  4. 设置级别权限,最后点击最下方的共享;
  5. 文件夹右键属性,选择高级共享,点击权限,设置权限为完全控制,然后确定;


是否设置密码

根据自己的需求,取选择「有密码保护的共享」或「无密码保护的共享」

打开控制面板进行设置

这里我创建了一个账号用于测试


创建 smb 协议

在正式开始我们的测试之前,我们还需要先给需要共享文件电脑创建 smb 协议,如图:

测试

「按 win + r 键」

测试命令:

\\ip地址\文件夹
例如:\\127.0.0.1\demo

点击确定之后,我们就可以看到,共享文件夹下的文件了。

使用代码将文件夹里的文件下载到本地

<!-- jcifs 共享文件夹目录 -->
<dependency><groupId>org.samba.jcifs</groupId><artifactId>jcifs</artifactId><version>1.3.3</version>
</dependency>

运行以下代码

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;import java.io.*;public class SmbUtil {public static void main(String[] args) {getRemoteFile();}public static void getRemoteFile() {InputStream in = null;try {// 创建远程文件对象// smb://ip地址/共享的路径/...// smb://用户名:密码@ip地址/共享的路径/...String remoteUrl = "smb://TestShare:z1019288@192.168.xxx.xxx/share/";SmbFile remoteFile = new SmbFile(remoteUrl);remoteFile.connect();//尝试连接if (remoteFile.exists()) {// 获取共享文件夹中文件列表SmbFile[] smbFiles = remoteFile.listFiles();for (SmbFile smbFile : smbFiles) {createFile(smbFile);}}} catch (Exception e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}} catch (Exception e) {e.printStackTrace();}}}public static void createFile(SmbFile remoteFile) {InputStream in = null;OutputStream out = null;try {File localFile = new File("D:/file/" + remoteFile.getName());in = new BufferedInputStream(new SmbFileInputStream(remoteFile));out = new BufferedOutputStream(new FileOutputStream(localFile));byte[] buffer = new byte[4096];//读取长度int len = 0;while ((len = in.read(buffer, 0, buffer.length)) != -1) {out.write(buffer, 0, len);}out.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (Exception e) {e.printStackTrace();}}}
}

运行成功以后,我们就把共享文件夹中的文件写入到我们指定的文件夹下了。

超详细:Java 读取 Windows 共享文件夹中的文件,并下载到本地电脑中相关推荐

  1. java读取局域网共享文件夹中文件并保存到本地文件夹

    在磁盘新建一个文件夹,右击文件夹属性,点击共享 点击网络和共享中心 设置文件夹可访问权限 到此就可以用本地ip加文件夹名称访问了,同局域网也可以通过改地址访问 文件夹的名称来自这张图的 网络路径 如果 ...

  2. win10计算机里文件夹怎么删除文件,如何删除win10“此电脑”中6个文件夹?

    更新完win10系统,我们会发现打开"此电脑",相比win7相比,除了还有传统的硬盘分区外,还多了6个文件夹:视频.图片.文档.下载.音乐和桌面.讲真,这些文件夹似乎也用不上,对于 ...

  3. Java 实现上传文件到共享文件夹,创建文件夹到共享文件夹

    Java 实现在共享文件夹下创建文件夹和文件 1.需要使用的依赖: <dependency><groupId>org.codelibs</groupId><a ...

  4. windows的盘共享挂载到linux下,通过Windows共享文件夹直接挂载到Linux中使用(实验操作)...

    通过Windows共享文件夹直接挂载到Linux中使用 实验背景:如果在Windows上有下载的压缩包,我们可以直接通过Windows的共享直接挂载到Linux中直接使用 实验环境:Windows系统 ...

  5. linux 内网共享文件夹_在Linux下访问Windows共享文件夹

    说明 以下操作以Ubuntu为例,大家可以参考. 我在Ubuntu 14.04和16.04都试过了. Windows共享文件夹 如果局域网内有一台Windows主机,将指定文件夹设为共享,就可以在局域 ...

  6. kali查看共享 linux_在Linux下访问Windows共享文件夹

    在Linux下访问Windows共享文件夹 说明 以下操作以Ubuntu为例,大家可以参考. 我在Ubuntu 14.04和16.04都试过了. Windows共享文件夹 如果局域网内有一台Windo ...

  7. 麒麟系统挂载文件、麒麟系统挂载windows共享文件夹

    1.挂载命令(mount) 首先,介绍一下挂载(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式:mount [-t vfstype] [-o opti ...

  8. Windows共享文件夹,让你的文件可以通过网络访问

    Windows共享文件夹,让你的文件可以通过网络访问 以windows11为例,现在有两台windows电脑A和B,B想通过网络访问A的某个文件,首先保证B是可以ping的通A的,比如共享A的D盘文件 ...

  9. CentOS6.5挂载windows共享文件夹

    由于工作需要,需要把本机的文件夹共享出去,然后让CentOS服务器临时使用下. 服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使用,所以就不打算搭建FTP和Samba服务器,直 ...

最新文章

  1. Python游戏开发,pygame模块,Python实现过迷宫小游戏
  2. USACO07DEC道路建设Building Roads(prim算法+堆优化与Kruskal+路径压缩对比)
  3. 北理工计算机原理与应用实验,北理工计算机原理与应用实验三教程.docx
  4. zookeeper简介以及C客户端用法
  5. Appleman and Tree CodeForces - 461B(树形dp)
  6. 职场十个方法 让专业气质成为你的符号!
  7. linux恢复mysql配置文件_linux下mysql配置文件my.cnf详解【转】
  8. 使用control.invoke返回当前窗口线程[转]
  9. 水文方面数据产品总结1
  10. Linux-页、页表、页框(块)+虚拟内存
  11. Linux开放mysql权限给任意主机远程登陆
  12. Web前端热门框架大全
  13. P1527,JZOJ 2908【集训队互测 2012】矩阵乘法(mat)
  14. CCS中CMD文件详解
  15. 易基因|植物育种:ChIP-seq(组蛋白)揭示H3K36me修饰影响温度诱导的植物可变剪接和开花
  16. 形状超链接html,ppt中标注形状超链接怎么做
  17. 麦克劳林公式求sin(x)
  18. BGA封装扇出过孔-BGA芯片的布局布线技巧
  19. 携手共进 智享未来丨美格智能2023年代理商合作伙伴大会成功举办
  20. oracle采购业务流程,ORACLE EBS 采购的业务流程

热门文章

  1. 如何实现大屏数字滚动效果
  2. Centos7服务器网络配置
  3. 如何用VS2017生成可执行文件
  4. 什么是FDM 3D打印技术?
  5. 均方根与峭度系数_调节阀流量系数的影响因素及其工程应用调节阀流量系数的影响...
  6. 如何修清净心?(净空老法师法语)
  7. MATLAB中的set函数
  8. 【anaconda创建虚拟环境】
  9. 【关于ChatGPT的30个问题】1、ChatGPT是什么?/ By 禅与计算机程序设计艺术
  10. javascript弹出浏览器的三种提示框:提示信息框、确认框、输入文本框