一个用于 SMB/CIFS 网络的 Java 库-JCIFS

ops/2024/12/13 10:34:34/

1.引言

在网络通信中,服务器消息块(SMB)协议在计算机之间实现文件共享和通信方面发挥着重要作用。对于 Java 开发者来说,由于缺乏对该协议的内置支持,使用 SMB 可能会面临挑战。这时,JCIFS(Java CIFS Client Library)就派上了用场。JCIFS 是一个强大的库,允许 Java 应用程序无缝地与 SMB/CIFS 资源进行交互。本文将探讨 JCIFS 的概念、工作原理以及如何在 Java 应用程序中有效使用它。

2.什么是 JCIFS

JCIFS 是一个开源 Java 库,旨在实现 SMB/CIFS 网络协议。它允许 Java 应用程序访问网络上的共享文件和打印机,从而更容易与基于 Windows 的系统集成。该库支持多种 SMB 功能,包括身份验证、文件操作和目录浏览。

3.JCIFS 的主要特性

  1. SMB/CIFS 协议支持JCIFS 支持 SMB1 和 SMB2 协议,使其能够与多种 SMB 服务器(包括 Windows 和 Samba)进行通信。

  2. 身份验证:该库提供对 NTLM(NT LAN Manager)身份验证的支持,允许安全访问共享资源。

  3. 文件操作JCIFS 允许开发者执行各种文件操作,如读取、写入、删除和列出共享目录中的文件。

  4. 目录浏览:该库使用户能够浏览共享目录并检索有关文件和子目录的信息。

  5. 跨平台兼容性:作为一个 Java 库,JCIFS 是平台独立的,适合在多种环境中使用。

4.在Windows上设置SMB共享

  1. 打开控制面板

    • 在Windows搜索框中输入“控制面板”,然后打开它。
  2. 进入“程序”

    • 点击“程序”,然后选择“启用或关闭Windows功能”。
  3. 启用SMB 1.0/CIFS文件共享支持(如果需要):

    • 在“Windows功能”窗口中,找到“SMB 1.0/CIFS文件共享支持”,确保它被勾选。如果你需要使用较新的SMB版本(如SMB 2.0或SMB 3.0),则不需要启用此选项。
  4. 创建共享文件夹

    • 在文件资源管理器中,找到你想要共享的文件夹,右键点击它,选择“属性”。
    • 转到“共享”选项卡,点击“高级共享”。
    • 勾选“共享此文件夹”,并可以设置共享名称。
    • 点击“权限”以设置用户权限,添加需要的用户并设置相应的权限(读取、写入等)。
  5. 设置网络发现和文件共享

    • 在控制面板中,进入“网络和共享中心”。
    • 点击“更改高级共享设置”。
    • 确保“打开网络发现”和“打开文件和打印机共享”选项被选中。
  6. 访问共享文件夹

    • 其他计算机可以通过输入 \\<windows-ip>\<shared-folder> 来访问共享文件夹。

5.如何开始使用 JCIFS

要在 Java 项目中使用 JCIFS,请按照以下步骤操作:

添加 JCIFS 依赖:如果您使用 Maven,可以在 pom.xml 中添加以下依赖:

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

基本示例:以下是如何使用 JCIFS 列出共享文件夹中文件的简单示例:

package com.et;import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;import java.io.BufferedReader;
import java.io.InputStreamReader;public class SmbFileReader {public static void main(String[] args) {String user = "dell"; // Username for the shared folderString password = "abc000000"; // Password for the shared folderString sharedFolderUrl = "smb://BJDPLHHUAPC/test/"; // URL of the shared folder// Create an authentication objectNtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user + ":" + password);try {// Create an SmbFile object for the shared folderSmbFile sharedFolder = new SmbFile(sharedFolderUrl, auth);// List the files in the shared folderSmbFile[] files = sharedFolder.listFiles();for (SmbFile file : files) {System.out.println("File: " + file.getName());// If it is a file, read its contentif (!file.isDirectory()) {try (SmbFileInputStream fis = new SmbFileInputStream(file);BufferedReader reader = new BufferedReader(new InputStreamReader(fis))) {String line;// Read the file line by linewhile ((line = reader.readLine()) != null) {System.out.println(line); // Print each line}}}}} catch (Exception e) {e.printStackTrace(); // Print the stack trace in case of an exception}}
}

运行示例:确保您具有正确的凭据和共享文件夹 URL。编译并运行 Java 程序,以查看指定共享文件夹中的文件列表。

File: file_utils/
File: file_utils1/
File: test.txt
this is a test

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/Java-demo(JCIFS)

6.JCIFS 的使用场景

  • 文件管理应用JCIFS 可用于创建管理远程 SMB 服务器上文件的应用程序,允许用户上传、下载和组织文件。
  • 备份解决方案:开发者可以利用 JCIFS 创建将数据存储在网络 SMB 共享上的备份解决方案。
  • 与遗留系统集成JCIFS 可以帮助将 Java 应用程序与依赖 SMB 进行文件共享的遗留系统集成。

7.结论

JCIFS 是一个对 Java 开发者非常有价值的工具,能够与 SMB/CIFS 资源进行交互。其强大的功能和易用性使其成为需要文件共享和网络通信的应用程序的优秀选择。通过理解如何有效利用 JCIFS,开发者可以创建强大的应用程序,能够与基于 Windows 的环境无缝集成。无论您是在构建文件管理系统、备份解决方案,还是仅仅需要访问共享资源,JCIFS 都能提供您成功所需的功能。


http://www.ppmy.cn/ops/141517.html

相关文章

More Effective C++之基础主题basic

More Effective C之基础主题Basics 条款1&#xff1a;仔细区别pointers和references条款2&#xff1a;最好使用C转型操作符条款3&#xff1a;绝对不要以多态(polymorphically)方式处理数组条款4&#xff1a;非必要不提供default constructor 基础议题&#xff0c;包括pointers,…

Python工厂设计模式:简化对象创建

Python工厂设计模式&#xff1a;简化对象创建 引言什么是工厂模式&#xff1f;简单工厂模式示例定义基类和子类创建工厂类使用工厂创建对象 优点使用场景总结 引言 在编程中&#xff0c;我们经常需要创建不同的对象&#xff0c;但有时创建对象的逻辑可能会变得复杂。工厂设计模…

数学建模之熵权法

熵权法 概述 **熵权法(Entropy Weight Method,EWM)**是一种客观赋权的方法&#xff0c;原理&#xff1a;指标的变异程度越小&#xff0c;所包含的信息量也越小&#xff0c;其对应的权值应该越低&#xff08;例如&#xff0c;如果对于所有样本而言&#xff0c;某项指标的值都相…

使用redis 的stream 做消息中间件 多线程消费消息

1.redis stream 特点 1.支持消息持久化 2.消费者组模式 3.消息确认机制 4. 消息重试机制 5. 死信队列2. 消息生产者服务 2.1 如下代码Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…

vue2-代理打包问题;CORS针对AJAX 请求,而不适用于资源请求

打包后请求被转发出现问题&#xff08;如返回 405 Method Not Allowed&#xff09;&#xff0c;通常是由以下原因导致的&#xff1a; 1. 代理配置未生效 原因分析 在开发环境中&#xff0c;Vue CLI 的 devServer.proxy 仅在本地开发服务器&#xff08;npm run serve&#xff…

iPhone怎么一键删除照片:快速清理存储空间

在我们的iPhone中&#xff0c;照片往往是占据大量存储空间的主要内容。随着时间的推移&#xff0c;无数快照、截图和下载的图片不断积累&#xff0c;最终使设备的存储空间告急。幸运的是&#xff0c;iPhone 提供了一些简便的方法来一键删除这些照片&#xff0c;而借助于专业工具…

虚拟机网络部署固化IP

有时我们发现在重启虚拟机后&#xff0c;Linux连接不上了&#xff0c;查看原来是IP变了&#xff0c;这是由于IP没有固化导致&#xff0c;所以要先固化ip。 配置网络环境&#xff1a; 1. 关闭防火墙 &#xff08; 重要 &#xff09; 1:查看防火状态 systemctl status firewa…

Django项目中使用SimpleUI

SimpleUI是一个简洁、美观的Django后台管理界面,它可以让你的Django Admin更加直观和易用。本文将指导你如何安装和配置SimpleUI,并在admin.py中进行自定义配置,以及如何修改APP和模型名称为中文,并关闭首页右侧版本信息和使用分析,最后添加自定义或第三方APP名,并添加自…