在网络通信中,服务器消息块(SMB)协议在计算机之间实现文件共享和通信方面发挥着重要作用。对于 Java 开发者来说,由于缺乏对该协议的内置支持,使用 SMB 可能会面临挑战。这时,JCIFS(Java CIFS Client Library)就派上了用场。JCIFS 是一个强大的库,允许 Java 应用程序无缝地与 SMB/CIFS 资源进行交互。本文将探讨 JCIFS 的概念、工作原理以及如何在 Java 应用程序中有效使用它。
JCIFS 是一个开源 Java 库,旨在实现 SMB/CIFS 网络协议。它允许 Java 应用程序访问网络上的共享文件和打印机,从而更容易与基于 Windows 的系统集成。该库支持多种 SMB 功能,包括身份验证、文件操作和目录浏览。
SMB/CIFS 协议支持:JCIFS 支持 SMB1 和 SMB2 协议,使其能够与多种 SMB 服务器(包括 Windows 和 Samba)进行通信。
身份验证:该库提供对 NTLM(NT LAN Manager)身份验证的支持,允许安全访问共享资源。
文件操作:JCIFS 允许开发者执行各种文件操作,如读取、写入、删除和列出共享目录中的文件。
目录浏览:该库使用户能够浏览共享目录并检索有关文件和子目录的信息。
跨平台兼容性:作为一个 Java 库,JCIFS 是平台独立的,适合在多种环境中使用。
打开控制面板:
进入“程序”:
启用SMB 1.0/CIFS文件共享支持(如果需要):
创建共享文件夹:
设置网络发现和文件共享:
访问共享文件夹:
\\<windows-ip>\<shared-folder>
来访问共享文件夹。添加 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