Java中用于SMB/CIFS网络的JCIFS库的用法详解

 更新时间:2024年12月13日 08:23:45   作者:HBLOG  
JCIFS是一个强大的库,允许Java应用程序无缝地与SMB/CIFS资源进行交互,本文将探讨JCIFS的概念和工作原理以及如何在 Java 应用程序中有效使用它,希望对大家有所帮助

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 的主要特性

  • SMB/CIFS 协议支持:JCIFS 支持 SMB1 和 SMB2 协议,使其能够与多种 SMB 服务器(包括 Windows 和 Samba)进行通信。
  • 身份验证:该库提供对 NTLM(NT LAN Manager)身份验证的支持,允许安全访问共享资源。
  • 文件操作:JCIFS 允许开发者执行各种文件操作,如读取、写入、删除和列出共享目录中的文件。
  • 目录浏览:该库使用户能够浏览共享目录并检索有关文件和子目录的信息。
  • 跨平台兼容性:作为一个 Java 库,JCIFS 是平台 独立的,适合在多种环境中使用。

4.在Windows上设置SMB共享

打开控制面板

在Windows搜索框中输入“控制面板”,然后打开它。

进入“程序”

点击“程序”,然后选择“启用或关闭Windows功能”。

启用SMB 1.0/CIFS文件共享支持(如果需要):

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

创建共享文件夹

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

设置网络发现和文件共享

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

访问共享文件夹

其他计算机可以通过输入 \\<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 folder
        String password = "abc000000"; // Password for the shared folder
        String sharedFolderUrl = "smb://BJDPLHHUAPC/test/"; // URL of the shared folder

        // Create an authentication object
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user + ":" + password);

        try {
            // Create an SmbFile object for the shared folder
            SmbFile sharedFolder = new SmbFile(sharedFolderUrl, auth);

            // List the files in the shared folder
            SmbFile[] files = sharedFolder.listFiles();
            for (SmbFile file : files) {
                System.out.println("File: " + file.getName());

                // If it is a file, read its content
                if (!file.isDirectory()) {
                    try (SmbFileInputStream fis = new SmbFileInputStream(file);
                         BufferedReader reader = new BufferedReader(new InputStreamReader(fis))) {
                        String line;
                        // Read the file line by line
                        while ((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

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

代码仓库

github.com/Harries/Java-demo(JCIFS)

6.JCIFS 的使用场景

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

7.结论

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

到此这篇关于Java中用于SMB/CIFS网络的JCIFS库的用法详解的文章就介绍到这了,更多相关Java JCIFS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring注解开发生命周期原理解析

    Spring注解开发生命周期原理解析

    这篇文章主要介绍了Spring注解开发生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Kafka在客户端实现消息的发送与读取

    Kafka在客户端实现消息的发送与读取

    这篇文章主要介绍了Kafka在客户端实现消息的发送与读取,KafkaProducer是用于发送消息的类,ProducerRecord类用于封装Kafka的消息,KafkaProducer的实例化需要指定的参数,Producer的参数定义在 org.apache.kafka.clients.producer.ProducerConfig类中,需要的朋友可以参考下
    2023-12-12
  • Java基于TCP协议socket网络编程的文件传送的实现

    Java基于TCP协议socket网络编程的文件传送的实现

    这篇文章主要介绍了Java基于TCP协议socket网络编程的文件传送的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决mybatis-plus自定义xml的坑

    解决mybatis-plus自定义xml的坑

    这篇文章主要介绍了解决mybatis-plus自定义xml的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 浅谈Java对象禁止使用基本类型

    浅谈Java对象禁止使用基本类型

    本文主要介绍了浅谈Java对象禁止使用基本类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java实现的读取资源文件工具类ResourcesUtil实例【可动态更改值的内容】

    Java实现的读取资源文件工具类ResourcesUtil实例【可动态更改值的内容】

    这篇文章主要介绍了Java实现的读取资源文件工具类ResourcesUtil,结合实例形式分析了java针对资源文件的读取与修改相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Linux服务器如何部署java项目

    Linux服务器如何部署java项目

    这篇文章主要介绍了Linux服务器如何部署java项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • java集合进行排序的方式总结

    java集合进行排序的方式总结

    在本篇文章里小编给大家整理的是一篇关于java集合进行排序的两种方式总结,有兴趣的朋友们可以学习参考下。
    2021-08-08
  • java中public class与class的区别详解

    java中public class与class的区别详解

    以下是对java中public class与class的区别进行了分析介绍,需要的朋友可以过来参考下
    2013-07-07
  • JDK1.7 Paths,Files类实现文件夹的复制与删除的实例

    JDK1.7 Paths,Files类实现文件夹的复制与删除的实例

    下面小编就为大家分享一篇JDK1.7 Paths,Files类实现文件夹的复制与删除的实例,具有很好的参考价值,希望对大家有所帮助。以前跟随小编过来看看吧
    2017-11-11

最新评论