本文涉及的幾個關(guān)鍵字解釋:
SMB: Server Message Block, 用于共享例如文件、打印機、串口或者是命名管道等用于通訊的抽象對象; CIFS: Common Internet File System, SMB的增強版,Windows 2000/XP實現(xiàn)了該協(xié)議; JCIFS: 一個實現(xiàn)了CIFS的純Java項目,無須任何的本地庫。
JCIFS的網(wǎng)址: http://jcifs.samba.org/
下面我們看一個非常簡單的例子,在運行這個例子之前必須準(zhǔn)備兩臺機器A、B,其中我們A是我們程序運行所在的機器,而B則是被訪問的機器,僅用B上的Guest用戶,而且A當(dāng)前的用戶不能存在于B機器中,也就是說當(dāng)我們通過資源管理器訪問 \\B 的時候,會要求輸入用戶名以及口令,如下圖所示:

這個時候A機器上的程序就不能通過例如 \\B\folder\1.txt 這樣的路徑來訪問B機器上共享文件夾folder中的1.txt文件,也就是說Java中自帶的File,FileInputStream類已經(jīng)不起作用了,不信? 不信你丫試試 
但是借助于JCIFS你就可以很容易的訪問到文件1.txt的內(nèi)容,我們先來看這個簡單的例子:
import jcifs.smb.*;
public class Demo{ public static void main(String[] args) throws Exception{ //將user和password換成是B機器上的用戶名以及口令 SmbFileInputStream in = new SmbFileInputStream("smb://user:password@B/folder/1.txt" ); byte[] b = new byte[8192]; int n; while(( n = in.read( b )) > 0 ) { System.out.write( b, 0, n ); } } }
編譯并運行這面的例子便可以打印文件 1.txt 的內(nèi)容。 把上面例子中的密碼填寫成一個錯誤的密碼再運行程序,便會得到 jcifs.smb.SmbAuthException 異常。
寫文件也是一個道理,關(guān)于文件的操作JCIFS提供了這么幾個類:SmbFile,SmbFileInputStream,SmbFileOutputStream,具體的用戶跟Java中對應(yīng)的類差不多。
JCIFS中文件的URL也就是smb_url,格式為:smb://{user}:{password}@{host}/{path} ,只要填好這個URL,JCIFS就會幫你搞定身份驗證的事,粉簡單的。 |