java訪問局域網共享文件或共享文件夾


java訪問局域網共享文件或共享文件夾

前言

    准備寫這篇博客是因為最近幾天由於項目需要訪問遠程路徑下的共享文件,之前沒接觸過涉及這方面的技術,百度了一番,發現基於java實現這個技術的有--jcifs。現在記錄一下一些簡單使用過程和遇到的一些問題和解決辦法。

簡介

  通用Internet文件系統

  在windows主機之間進行網絡文件共享是通過使用微軟公司自己的CIFS服務實現的。  

  CIFS 是一個新提出的協議,它使程序可以訪問遠程Internet計算機上的文件並要求此計算機的服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序為它提供服務。服務器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議(見最后的名詞解釋)現在是局域網上用於服務器文件訪問和打印的協議。象SMB協議一樣,CIFS在高層運行,而不象TCP/IP協議那樣運行在底層。CIFS可以看做是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現。

  CIFS 可以使您達到以下功能: 

  1.訪問服務器本地文件並讀寫這些文件 

     2.與其它用戶一起共享一些文件塊 

  3.在斷線時自動恢復與網絡的連接 

   4.使用西歐字符文件名 
   一般來說,CIFS使用戶得到比FTP更好的對文件的控制。它提供潛在的更直接地服務器程序接口,這比使用HTTP協議的瀏覽器更好。CIFS最典型的應用是windows用戶能夠從“網上鄰居”中找到網絡中的其他主機並訪問其中的共享文件夾.
  CIFS 是開放的標准而且已經被作為Internet應用程序標准被提交到IETF。

      JCIFS是CIFS 在JAVA中的一個實現,是samba組織負責維護開發的一個開源項目,專注於使用java語言對cifs協議的設計和實現。他們將jcifs設計成為一個完整的,豐富的,具有可擴展能力且線程安全的客戶端庫。這一庫可以應用於各種java虛擬機訪問遵循CIFS/SMB網絡傳輸協議的網絡資源。類似於java.io.File的接口形式,在多線程的工作方式下被證明是有效而容易使用的。

  上面這段是在csdn看到的,鏈接:https://blog.csdn.net/qq_33223299/article/details/80092897

簡單使用

  使用單元測試

        1、登錄:填寫服務器ip,域名、登錄賬號、登錄密碼,可以查看是否能正常訪問。

1       //登陸
2             UniAddress address = UniAddress.getByName("ip");//
3             NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("域名", "登陸賬號", "登陸密碼");
4             SmbSession.logon(address, auth);

  2、獲取遠程文件資源:

    方式1:需要域名的情況

      smb://域名;登錄賬號:登錄密碼@服務器ip/文件夾名稱/
   方式2:不需要域名的情況
      smb://登錄賬號:登錄密碼@服務器ip/文件夾名稱/
   方式3:不需要用戶名密碼的情況
      smb://服務器ip/文件夾名稱/
需要注意的問題:1、如果是文件夾后邊需要加 '/' 斜杠,不然操作方法的時候回報錯。
        2、第二種情況是我自己遇到的,我訪問的共享文件是在某個域中,但是不寫域名也能訪問成功,格式是這樣的:smb://;登錄賬號:登錄密碼@服務器ip/文件夾名稱/
但是不能省略域名和登錄賬號之間的 ';' 分號。沒看源碼所以不知道什么情況,有知道的可以分享下。
      SmbFile smbFile = new SmbFile("smb://域名;登錄賬號:登錄密碼@服務器ip/文件夾名稱/");
        if(smbFile.isDirectory()){//判斷是否是文件夾,判斷是否是文件:smbFile.isFile(),這個跟java.io.File的方法類似
                SmbFile[] listFiles = smbFile.listFiles();//獲取所有文件
                System.out.println(listFiles.length);//文件數量
                for (SmbFile smbFile2 : listFiles) {
                    System.out.println(smbFile2.getName());//文件名
            InputStream is = smbFile.getInputStream();//獲取輸入流
System.out.println(smbFile2.getPath());//smb協議下的服務器文件路徑 } }

  3、讀取文件速度太慢,當你想把共享文件下載到本地的時候,你會發現很慢。這里提供一個解決方案。

    

System.setProperty("jcifs.smb.client.dfs.disabled","true");//禁用dfs,提高讀取速度

  在new SmbFile();之前設置。

      4、讀取windows10下的共享文件失敗。是因為windows10下默認沒勾選SMB 1.0/CIFS文件共享支持,也就是沒啟用SMB1.0協議,jcifs只支持1.0。

            解決方案:打開控制面板-->程序和功能-->點擊左側下的啟用或關閉windows功能-->勾選SMB 1.0/CIFS文件共享支持,重啟系統。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM