熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

用JAVA訪問共享文件系統

2022-06-13   來源: Javascript 

  前言
  在Microsoft 網 絡 系 統 中SMB(Server Message Block 服 務 信 息 塊) 協 議 是Windows for Workgroup(WfWg)Windows Windows NT 和LanManager 用 來 實 現 共 享 局 域 網 上 文 件 和 打 印 機 的 協 議 對 於 利 用Linux 和Windows NT 構 建 的 局 域 網 來 說Samba 就 是 為Linux 提 供 的SMB 客 戶 程 序/ 服 務 器 程 序 的 軟 件 包 其 功 能 是 實 現Windows 和Linux 互 相 共 享 對 方 的 磁 盤 空 間 和 打 印 機通用網絡文件系統簡稱CIFS它事實上是windows平台文件共享的標准協議它是windows explorer網絡鄰居和映射網絡驅動器的底層實現協議JAVA具有天然的平台無關性使用JAVA可以訪問任何類型的服務器或客戶機上的共享文件系統並且編寫的軟件產品可以運行於任何平台因此用JAVA訪問共享文件系統在企業應用中具有得天獨厚的優勢
  
  JAVA中的CIFS實現
  Jcifs是CIFS在JAVA中的一個實現是samba組織本著linux的精神負責維護開發的一個開源項目這個項目專注於使用java語言對cifs協議的設計和實現他們將jcifs設計成為一個完整的豐富的具有可擴展能力且線程安全的客戶端庫這一庫可以應用於各種java虛擬機訪問遵循CIFS/SMB網絡傳輸協議的網絡資源類似於javaioFile的接口形式在多線程的工作方式下被證明是有效而容易使用的目前jcifs的最新版本是jcifsb你可以在本文最後列出的參考資料中獲得下載這一類庫的網址這一版本還支持分布式的文件系統本文尚不涉及這一內容
  
  JAVA/CIFS程序設計
  如果你曾經使用過java的文件操作功能那麼你將很容易掌握jcifs的開發方法Jcifs通過類似如下的資源url定位一個資源
  
  smb://guest:@/share/atxt
  
  這個url的開始部分smb:// 說明了這是一個smb類型的url接下來的guest和分別是訪問共享資源的用戶名稱和密碼@後面是要訪問的資源的主機名或IP地址最後是資源的共享文件夾名稱和共享資源名
  
  在JAVA程序中使用如下方式獲得一個遠程共享文件的句柄
  
  SmbFile file = new SmbFile(smb://guest:@/share/atxt);
  
  這裡的句柄不僅限於遠程的共享文件還可能是共享文件夾isFile()方法和isDirectory()用來判斷這個句柄對應的資源的真實屬性如果是共享文件夾通過調用它的list()方法將獲得其中資源的列表List方法支持過濾器機制有兩種過濾器可供使用一種是SmbFileFilter另一種是SmbFilenameFilter這兩個在jcifs中作為接口出現你可以根據自己的需要派生出個性化的過濾器實現接口中的accept方法以滿足不同業務的需求
  
  SmbFileInputStream是smb文件的輸入流它的功能是以流的方式打開一個SmbFile
  
  SmbFileInputStream in = new SmbFileInputStream(file);
  
  SmbFileInputStream提供read方法你可以從這個流中讀出遠程文件全部的內容
  
  至此你已經掌握了java訪問smb文件系統的基本方法
  
  SmbFileOutputStream是smb文件的輸入流可以向遠程文件系統通過smb寫入數據方法與上面類似不再贅述
  
  本文後面附帶的源代碼是一個完整的例子它完成功能很簡單就是將另一台電腦上指定共享文件夾下的某些文件拷貝到本機的指定目錄下通過這個例子相信你很容易將它移植到你的開發產品中
  
  第一步設置運行環境將源代碼解壓縮將lib目錄下的名稱為jcifsbjar的文件加入到你的操作系統的classpath中使示例程序運行時能夠找到這個庫
  
  第二步在另一台計算機上建立名稱為share的共享文件夾用戶名為guest密碼也為guest假設這台計算機的ip地址是
  
  第三步在剛才建立的共享文件夾下放置兩個文件名稱分別為hellotxtbyetxt文件的內容無所謂
  
  第三步在本地計算機上的C盤跟目錄下建立一個名稱為tmp的空目錄置此目錄可寫
  
  第四步編譯運行Samplejava並運行
  
  Java Sample guest guest /share/ c:/tmp/
  
  檢查c:\tmp文件夾會發現hellotxt這個文件被復制到了本機而byetxt沒有被復制因為Samplejava中使用了過濾器僅允許名稱為hello開頭的文件被拷貝
  
  後記
  對共享文件系統的訪問是內部辦公系統等涉及到文件遷移的軟件產品開發過程中不可回避的課題jCifs是一套針對這一課題完整而強大的解決方案通過它你可以實現對任何共享文件系統的訪問

From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/11140.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.