原创

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

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 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

6.JCIFS 的使用场景

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

7.结论

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