溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java中如何使用SMB處理遠(yuǎn)程服務(wù)器中的共享文件

發(fā)布時(shí)間:2022-02-28 10:50:24 來(lái)源:億速云 閱讀:662 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(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ò)。

代碼庫(kù)

我們正在設(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,passworddomains在第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í)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI