您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Java中如何使用SMB處理遠(yuǎn)程服務(wù)器中的共享文件”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
我們習(xí)慣于使用共享文件,其中共享僅限于某些域中的用戶(hù)或某些用戶(hù)。遠(yuǎn)程應(yīng)用程序需要訪(fǎng)問(wèn)共享資源并在共享位置執(zhí)行添加、刪除資源等操作。
服務(wù)器具有共享資源,這些資源通常在 Windows 機(jī)器中使用服務(wù)器消息塊 (SMB) 協(xié)議 ( Server Message Block )。SMB 協(xié)議使應(yīng)用程序能夠訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)器上的文件,以及允許客戶(hù)端應(yīng)用程序打開(kāi)、讀取、移動(dòng)、更新遠(yuǎn)程服務(wù)器上的文件的其他資源。該資源僅限于某些用戶(hù)。用戶(hù)需要傳遞憑據(jù)才能訪(fǎng)問(wèn)共享資源。用戶(hù)可以在共享資源上進(jìn)行的活動(dòng)在共享權(quán)限中定義。讓我們假設(shè)用戶(hù)具有讀和寫(xiě)權(quán)限。
在本文中,我將為大家演示一個(gè)例子,其中應(yīng)用程序需要使用一個(gè)簡(jiǎn)單的 Java 應(yīng)用程序與 Windows 服務(wù)器計(jì)算機(jī)中的共享文件進(jìn)行交互。用例做出以下假設(shè):
服務(wù)器是一臺(tái) Windows 機(jī)器。
存在名為“ Test
”的本地用戶(hù),該用戶(hù)的密碼為“ Password
”。
共享位置是“ 127.0.0.0.1\temp ”。
用戶(hù)“ Test
”有權(quán)訪(fǎng)問(wèn)共享位置“ temp ”,該位置可以位于 IP 為“ 127.0.0.1
”的計(jì)算機(jī)中的任何位置。
客戶(hù)端應(yīng)用程序可以訪(fǎng)問(wèn)網(wǎng)絡(luò)。
我們正在設(shè)計(jì)的應(yīng)用程序是在 Java 中使用 Maven 進(jìn)行構(gòu)建和依賴(lài)項(xiàng)管理。我正在使用 JCIFS,這是一個(gè)實(shí)現(xiàn)CIFS/SMB 網(wǎng)絡(luò)協(xié)議的開(kāi)源客戶(hù)端庫(kù)。該庫(kù)可從 Maven Repository 獲得。
依賴(lài)關(guān)系顯示在以下pom.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fileShare</groupId>
<artifactId>fileShare</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>jcifs</groupId>
<artifactId>jcifs</artifactId>
<version>1.3.17</version>
</dependency>
</dependencies>
</project>
目前,該應(yīng)用程序有一個(gè)文件Main.java,內(nèi)容如下:
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import java.net.MalformedURLException;
public class Main {
public static void main(String[] args) {
String url = "smb://127.0.0.1/test/";
String userName = "test";
String password = "password";
String domain = null;
NtlmPasswordAuthentication auth =
new NtlmPasswordAuthentication(null, userName, password);
try {
doRecursiveLookup(new SmbFile(url, auth));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
/*
* Recursively scans through the folder for files and prints the name of folder and file
*/
public static void doRecursiveLookup(SmbFile smb) {
try {
if (smb.isDirectory()) {
System.out.println(smb.getName());
for (SmbFile f : smb.listFiles()) {
if (f.isDirectory()) {
doRecursiveLookup(f);
} else {
System.out.println("\t:" + f.getName());
}
}
} else {
System.out.println("\t:" + smb.getName());
}
} catch (SmbException e) {
e.printStackTrace();
}
}
}
這里,main方法使用for smb協(xié)議的url模式,并在第8行指向共享位置。局部變量for userName,password
和domains
在第9到11行初始化,并在第13行驗(yàn)證用戶(hù),此時(shí)應(yīng)用程序已成功連接到共享文件夾。
應(yīng)用程序SmbFile
在第 15 行創(chuàng)建一個(gè)對(duì)象并將該文件夾傳遞給doRecursiveLookup(..)
第 24 行調(diào)用的方法。該方法簡(jiǎn)單地遍歷共享位置中的所有文件和文件夾,并以遞歸方式在控制臺(tái)中打印名稱(chēng)。請(qǐng)注意,SmbFile
文件或文件夾的對(duì)象是相同的,并且.isDirectory()
方法用于測(cè)試范圍內(nèi)的對(duì)象是文件還是文件夾。
“Java中如何使用SMB處理遠(yuǎn)程服務(wù)器中的共享文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。