JAVA 访问windows共享文件夹
一、使用技术
JCIFS框架对Windows共享文件夹进行读写,使用了SMB通信协议,它为局域网内不同的计算机之间提供文件和打印机等资源共享服务 。
二、共享文件夹设置
测试共享文件夹机器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共享文件夹相关推荐
- 超详细:Java 读取 Windows 共享文件夹中的文件,并下载到本地电脑中
目录 JCIFS 介绍 SMB协议 设置共享文件夹(这里我们选择有密码的方式进行共享) 是否设置密码 创建 smb 协议 测试 使用代码将文件夹里的文件下载到本地 项目常常需要有访问共享文件夹的需求, ...
- kali查看共享 linux_在Linux下访问Windows共享文件夹
在Linux下访问Windows共享文件夹 说明 以下操作以Ubuntu为例,大家可以参考. 我在Ubuntu 14.04和16.04都试过了. Windows共享文件夹 如果局域网内有一台Windo ...
- Linux访问windows共享文件夹
Linux访问windows共享文件夹 linux和windows文件的共享:(在Ubuntu12.04下无需手动安装samba服务) 1. windows共享一个文件夹,比如说文件夹名为deamon ...
- 错误集:smbclient访问Windows共享文件夹报错误:protocol negotiation failed: NT_STATUS_CONNECTION_RESET
smbclient访问Windows共享文件夹报错误:protocol negotiation failed: NT_STATUS_CONNECTION_RESET 文章目录 smbclient访问W ...
- android 程序 共享文件,如何从Android智能手机访问Windows共享文件夹 | MOS86
为了从Android设备访问Windows PC上的共享文件,您可以使用名为ES File Explorer File Manager的第三方应用程序.在此之前,您必须检查您是否有足够的权限访问数据. ...
- linux共享文件夹 redhat_Linux怎么访问Windows共享文件夹
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux系统上访问Windows共 ...
- linux 内网共享文件夹_在Linux下访问Windows共享文件夹
说明 以下操作以Ubuntu为例,大家可以参考. 我在Ubuntu 14.04和16.04都试过了. Windows共享文件夹 如果局域网内有一台Windows主机,将指定文件夹设为共享,就可以在局域 ...
- 在Ubuntu下访问Windows共享文件夹
文章目录 要求 操作流程 1. 安装必要的文件 2. 验证安装是否正常 3. 将Windows共享文件夹与本地文件夹关联 注意 要求 在Ubuntu下进行配置,从而可以访问 192.168.3.6 的 ...
- iphone文件访问Windows共享文件夹
Windows共享 添加新用户 首先,添加新用户,在搜索中搜索"lusrmgr.MSC" 在用户处右击添加新用户 设置用户名,密码和确认密码,取消勾选第一个选项 点击创建 2. 共 ...
- Ubuntu访问Windows共享文件夹的方法
在局域网中Windows系统的电脑用共享文件夹传输文件十分方便,只需一台设置共享文件夹,另一台映射共享路径,输入用户名和密码即可访问. 而跨系统共享文件则需进行设置,方可实现同样功能. 本文使用sam ...
最新文章
- 打工人必备的8款冷门软件,每一款都让人相见恨晚!
- Java布尔类的compareTo()
- hive 百分比_HIVE短期内再次突破前高
- 程序员基本功03常见JAVA集合的实现细节
- Python3 sorted() 与sort()函数
- UILabel根据内容自动调整高度
- SVN update: 'skipped' message
- GB28181的协议详解
- js脚本锁计算机软件,AutoJs解密工具
- zemax输出ies_基于ZEMAX的光学设计教程(第2版)
- Python 词云图:wordcloud库的使用
- 计算机注销和重新启动的区别,注销和重启的区别(转载)
- Java聊天室——一对一模式
- 抖音seo源码,抖音关键词,抖音下拉词,抖音seo矩阵系统,分发源码技术搭建
- Bootstrap导航栏下拉菜单不生效的问题
- SQL存储过程根据,循环取出数据
- java web短信接口_Java调用WebService短信接口-Go语言中文社区
- 几种自动目标跟踪算法的比较研究
- 女王大学 计算机专业,女王大学计算机科学专业本科.pdf
- 如何调成适用计算机的分辨率,怎么调电脑分辨率调最合适