Java读取共享文件夹下面的文件(利用smb协议)

一、先给需要共享文件电脑创建smb协议

1.1 控制面板->程序->启用或关闭window功能->smb1.0

 二、设置共享文件

2.1 选择你想要共享的文件夹设置everyone或者指定的用户

2.2 在高级共享里面设置成共享此文件夹

 2.3 打开网络共享中心,进行无密码共享(有密码也可以,无密码是为了更方便)

2.4 测试  \\ip\文件夹

三、准备好对应的jar

链接:https://pan.baidu.com/s/12uK4yvXSGBqNoFB_PoYHRg 
提取码:jcif 


3.1 下载好了以后放到本地maven仓库

比如我放到d盘,直接打开cmd运行

mvn install:install-file -Dfile=D:\jcifs-1.3.17.jar -DgroupId=org.jcifs -DartifactId=jcifs -Dversion=1.3.17 -Dpackaging=jar

 成功了以后直接引用

<dependency>
   <groupId>org.jcifs</groupId>
   <artifactId>jcifs</artifactId>
   <version>1.3.17</version>
</dependency>

3.2 进行代码测试

 public static void main(String[] args) throws IOException {
        //局域网共享文件,读文件
        //创建远程文件对象  smb://用户名:密码@ip地址/共享的路径/...
        SmbFile smbFile = new SmbFile("smb://192.168.1.8/demo/1.txt");
        // 通过 smbFile.isDirectory();isFile()可以判断smbFile是文件还是文件夹
        //int length = smbFile.getContentLength();// 得到文件的大小
        //byte buffer[] = new byte[length];
        //new SmbFileInputStream(smbFile); // 建立smb文件输入流
        BufferedReader reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(smbFile), StandardCharsets.UTF_8));//如果有中文乱码,换成gbk试试
        int tempchar = 0;
        while ((tempchar = reader.read()) != -1) {
            if (((char) tempchar) != '\r') {
                System.out.print((char) tempchar);
            }
        }
        reader.close();
    }

3.3 结果

上面代码1.txt运行结果

 

### 使用 SMB 协议访问和读取共享文件夹中的文件 SMB(Server Message Block)是一种用于在网络中共享文件、打印机和其他资源的通信协议。通过 Java 编程语言,可以利用第三方库(如 JCIFS 或 Samba-Java-Library)实现对远程共享文件夹的访问。 以下是基于 JCIFS 库的一个方法说明以及示例代码: #### 方法概述 JCIFS 是一个开源的 Java 库,支持客户端通过 SMB/CIFS 协议与 Windows 文件服务器交互。要使用该库访问共享文件夹读取其内容,需完成以下操作: - 添加 JCIFS 依赖到项目中。 - 创建 `NtlmPasswordAuthentication` 对象以存储登录凭证。 - 构造指向目标共享文件夹的 URI。 - 打开连接并通过流方式读取文件内容。 具体实现如下所示[^1]。 ```java import jcifs.smb.NtlmPasswordAuthentication; import jcifs.smb.SmbFile; import java.io.InputStream; public class SmbFileReader { public static void main(String[] args) { try { String user = "domain;username"; // 替换为实际域/用户名组合 String password = "password"; // 替换为实际密码 NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, user, password); String url = "smb://server/share/filename.txt"; // 替换为目标路径 SmbFile smbFile = new SmbFile(url, auth); InputStream inputStream = smbFile.getInputStream(); byte[] buffer = new byte[8 * 1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { System.out.write(buffer, 0, bytesRead); // 输出数据至控制台 } inputStream.close(); } catch (Exception e) { e.printStackTrace(); // 处理异常情况 } } } ``` 上述代码展示了如何借助 JCIFS 实现基本功能。需要注意的是,在生产环境中应妥善管理敏感信息(例如密码),避免硬编码于源码之中。 #### 关键点解析 - **身份验证**:通过 `NtlmPasswordAuthentication` 类指定有效的账户凭据以便成功授权。 - **URI 格式化**:遵循标准 SMB URL 结构定义目标位置。 - **错误处理机制**:考虑到网络波动等因素可能引发的各种异常状况,建议增强健壮性的捕获逻辑。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值