一、使用技术

JCIFS框架对Windows共享文件夹进行读写,使用了SMB通信协议,它为局域网内不同的计算机之间提供文件和打印机等资源共享服务 。

二、共享文件夹设置

  1. 测试共享文件夹机器windows版本为win10家庭版.首先在应用和功能列表里找到

    2.然后在windows功能中打开SMB功能


    最后把一个把电脑上任意一个文件夹设置成共享.设置到这里就完成了!

三、版本选择

最开始我是使用的最新版本的

<dependency><groupId>org.samba.jcifs</groupId><artifactId>jcifs</artifactId><version>1.3.3</version></dependency>

先贴上我的测试代码

package com.plover.system.util;import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;/*** @author : AllenJ* @since : 2021/5/31*/
public class SmbUtil {private static final String USER_DOMAIN = "";  //域账号,没有可以不填private static final String USER_NAME = "test";  //账号private static final String USER_PWS = "123456";  //密码public static void main(String[] args) {String shareDir = "smb://192.168.4.19/x04shareTest/";getFileList(shareDir);
//        smdDownload(shareDir, "d://home/smb");}/*** @date 2020-03-19* 遍历指定目录下的文件* shareDirectory: smb://192.168.4.19/x804shareTest/*/private static void getFileList(String shareDirectory) {// 域服务器验证NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, USER_NAME, USER_PWS);SmbFile remoteFile = null;try {remoteFile = new SmbFile(shareDirectory, auth);} catch (MalformedURLException e) {e.printStackTrace();}try {if (remoteFile.exists()) {SmbFile[] files = remoteFile.listFiles();for (SmbFile f : files) {System.out.println(f.getName());}}} catch (SmbException e) {e.printStackTrace();}}/*** @Param shareUrl:smb://192.168.4.19/x804shareTest/abc.jpg* @Param localDirectory 本地目录,如d://home/smb*/public static void smdDownload(String shareUrl, String localDirectory) {NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER_DOMAIN, USER_NAME,USER_PWS);SmbFile remoteFile = null;try {remoteFile = new SmbFile(shareUrl, auth);} catch (MalformedURLException e) {e.printStackTrace();}try {if (!remoteFile.exists()) {System.out.print("共享文件不存在");return;}} catch (SmbException e) {e.printStackTrace();}// 有文件的时候再初始化输入输出流InputStream in = null;OutputStream out = null;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(new SmbFileInputStream(remoteFile));out = new BufferedOutputStream(new FileOutputStream(localFile));byte[] buffer = new byte[1024];int byteRead;while ((byteRead = in.read(buffer)) != -1) {out.write(buffer, 0, byteRead);}out.flush(); //刷新缓冲区输出流} catch (Exception e) {LoggerUtil.error("", e);} finally {if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}/*** @Param shareDirectory 共享目录* @Param localFilePath 本地目录中的文件路径*/public static void smbUpload(String shareDirectory, String localFilePath) {InputStream in = null;OutputStream out = null;try {File localFile = new File(localFilePath);String fileName = localFile.getName();SmbFile remoteFile = new SmbFile(shareDirectory + "/" + fileName);in = new BufferedInputStream(new FileInputStream(localFile));out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));byte[] buffer = new byte[1024];int byteRead;while ((byteRead = in.read(buffer)) != -1) {out.write(buffer, 0, byteRead);}out.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}}
}

运行main方法后报了如下错误

jcifs.smb.SmbException
jcifs.util.transport.TransportException
java.io.IOException: Invalid payload size: 405at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:279)at jcifs.smb.SmbTransport.doConnect(SmbTransport.java:306)at jcifs.util.transport.Transport.run(Transport.java:240)at java.lang.Thread.run(Thread.java:748)at jcifs.util.transport.Transport.run(Transport.java:256)at java.lang.Thread.run(Thread.java:748)at jcifs.smb.SmbTransport.connect(SmbTransport.java:296)at jcifs.smb.SmbTree.treeConnect(SmbTree.java:141)at jcifs.smb.SmbFile.doConnect(SmbFile.java:858)at jcifs.smb.SmbFile.connect(SmbFile.java:901)at jcifs.smb.SmbFile.connect0(SmbFile.java:827)at jcifs.smb.SmbFile.exists(SmbFile.java:1360)at com.plover.system.util.SmbUtil.listFiles(SmbUtil.java:51)at com.plover.system.util.SmbUtil.main(SmbUtil.java:31)

在研究了官方文档搜索了无数论坛后,一直没有找到解决版本,后来在国外某个小论坛有个网友回复降版本可以解决这个问题,于是我把版本替换成1.2.19版本

<dependency><groupId>org.samba.jcifs</groupId><artifactId>jcifs</artifactId><version>1.2.19</version>
</dependency>

完美解决!!

JAVA 访问windows共享文件夹相关推荐

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

    目录 JCIFS 介绍 SMB协议 设置共享文件夹(这里我们选择有密码的方式进行共享) 是否设置密码 创建 smb 协议 测试 使用代码将文件夹里的文件下载到本地 项目常常需要有访问共享文件夹的需求, ...

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

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

  3. Linux访问windows共享文件夹

    Linux访问windows共享文件夹 linux和windows文件的共享:(在Ubuntu12.04下无需手动安装samba服务) 1. windows共享一个文件夹,比如说文件夹名为deamon ...

  4. 错误集:smbclient访问Windows共享文件夹报错误:protocol negotiation failed: NT_STATUS_CONNECTION_RESET

    smbclient访问Windows共享文件夹报错误:protocol negotiation failed: NT_STATUS_CONNECTION_RESET 文章目录 smbclient访问W ...

  5. android 程序 共享文件,如何从Android智能手机访问Windows共享文件夹 | MOS86

    为了从Android设备访问Windows PC上的共享文件,您可以使用名为ES File Explorer File Manager的第三方应用程序.在此之前,您必须检查您是否有足够的权限访问数据. ...

  6. linux共享文件夹 redhat_Linux怎么访问Windows共享文件夹

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux系统上访问Windows共 ...

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

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

  8. 在Ubuntu下访问Windows共享文件夹

    文章目录 要求 操作流程 1. 安装必要的文件 2. 验证安装是否正常 3. 将Windows共享文件夹与本地文件夹关联 注意 要求 在Ubuntu下进行配置,从而可以访问 192.168.3.6 的 ...

  9. iphone文件访问Windows共享文件夹

    Windows共享 添加新用户 首先,添加新用户,在搜索中搜索"lusrmgr.MSC" 在用户处右击添加新用户 设置用户名,密码和确认密码,取消勾选第一个选项 点击创建 2. 共 ...

  10. Ubuntu访问Windows共享文件夹的方法

    在局域网中Windows系统的电脑用共享文件夹传输文件十分方便,只需一台设置共享文件夹,另一台映射共享路径,输入用户名和密码即可访问. 而跨系统共享文件则需进行设置,方可实现同样功能. 本文使用sam ...

最新文章

  1. 打工人必备的8款冷门软件,每一款都让人相见恨晚!
  2. Java布尔类的compareTo()
  3. hive 百分比_HIVE短期内再次突破前高
  4. 程序员基本功03常见JAVA集合的实现细节
  5. Python3 sorted() 与sort()函数
  6. UILabel根据内容自动调整高度
  7. SVN update: 'skipped' message
  8. GB28181的协议详解
  9. js脚本锁计算机软件,AutoJs解密工具
  10. zemax输出ies_基于ZEMAX的光学设计教程(第2版)
  11. Python 词云图:wordcloud库的使用
  12. 计算机注销和重新启动的区别,注销和重启的区别(转载)
  13. Java聊天室——一对一模式
  14. 抖音seo源码,抖音关键词,抖音下拉词,抖音seo矩阵系统,分发源码技术搭建
  15. Bootstrap导航栏下拉菜单不生效的问题
  16. SQL存储过程根据,循环取出数据
  17. java web短信接口_Java调用WebService短信接口-Go语言中文社区
  18. 几种自动目标跟踪算法的比较研究
  19. 女王大学 计算机专业,女王大学计算机科学专业本科.pdf
  20. 如何调成适用计算机的分辨率,怎么调电脑分辨率调最合适

热门文章

  1. react组件设计原则_可靠React组件设计的7个准则之封装
  2. freemyapps 推荐链接
  3. Java中抽象类和接口的区别
  4. python学习实验报告(第五周)
  5. jQuery实现二级下拉菜单
  6. JavaScript document对象
  7. mysql表必须有主键吗_SQL中的每一张表都必须设有主键吗
  8. matlab 遥感图像分类,彩色遥感图像分类算法及Matlab实现
  9. rrd文件导入mysql_RRDtool 系列连载-5 :查询 RRD 数据库信息
  10. android之Goolgle Map