CIFS (Common Internet File System)
html
通用Internet文件系統
java
在windows主機之間進行網絡文件共享是經過使用微軟公司本身的CIFS服務實現的。
windows
CIFS 是一個新提出的協議,它使程序能夠訪問遠程Internet計算機上的文件並要求此計算機的服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器得到請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議(見最後的名詞解釋)如今是局域網上用於服務器文件訪問和打印的協議。象SMB協議同樣,CIFS在高層運行,而不象TCP/IP協議那樣運行在底層。CIFS能夠看作是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現。 瀏覽器
CIFS 可使您達到如下功能:
安全
1.訪問服務器本地文件並讀寫這些文件
服務器
2.與其它用戶一塊兒共享一些文件塊
網絡
3.在斷線時自動恢復與網絡的鏈接
session
4.使用西歐字符文件名
多線程
通常來講,CIFS使用戶獲得比FTP更好的對文件的控制。它提供潛在的更直接地服務器程序接口,這比使用HTTP協議的瀏覽器更好。CIFS最典型的應用是windows用戶可以從「網上鄰居」中找到網絡中的其餘主機並訪問其中的共享文件夾.
app
CIFS 是開放的標準並且已經被做爲Internet應用程序標準被提交到IETF。
JCIFS是CIFS 在JAVA中的一個實現,是samba組織負責維護開發的一個開源項目,專一於使用java語言對cifs協議的設計和實現。他們將jcifs設計成爲一個完整的,豐富的,具備可擴展能力且線程安全的客戶端庫。這一庫能夠應用於各類java虛擬機訪問遵循CIFS/SMB網絡傳輸協議的網絡資源。相似於java.io.File的接口形式,在多線程的工做方式下被證實是有效而容易使用的。
JCIFS的開發方法相似java的文件操做功能,它的資源url定位:smb://{user}:{password}@{host}/{path},smb爲協議名,user和password分別爲共享文件機子的登錄名和密碼,@後面是要訪問的資源的主機名或IP地址。最後是資源的共享文件夾名稱和共享資源名。例如 smb://administrator:122122@192.168.0.22/test/response.txt。
在JAVA程序中,使用以下方式得到一個遠程共享文件的句柄:SmbFile file = new SmbFile("smb://guest:1234@192.168.3.56/share/a.txt");這裏的句柄不只限於遠程的共享文件,還多是共享文件夾。isFile()方法和isDirectory()用來判斷這個句柄對應的資源的真實屬性。若是是共享文件夾,經過調用它的list()方法將得到其中資源的列表。List方法支持過濾器機制,有兩種過濾器可供使用,一種是SmbFileFilter,另外一種是SmbFilenameFilter,這兩個在jcifs中做爲接口出現,你能夠根據本身的須要派生出個性化的過濾器,實現接口中的accept方法,以知足不一樣業務的需求。
SmbFileInputStream是smb文件的輸入流,它的功能是以流的方式打開一個SmbFile:SmbFileInputStream in = new SmbFileInputStream(file);SmbFileInputStream提供read方法,你能夠從這個流中讀出遠程文件所有的內容。
jcifs可從http://jcifs.samba.org/下載,下面是一個簡單的例子:
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFile;
public class ReadShareFile {
public static void main(String[] args) {
try{
SmbFile smbFile=new SmbFile("smb://test:test@10.218.100.12/share2/aa.txt");
//經過 smbFile.isDirectory();isFile()能夠判斷smbFile是文件仍是文件夾
int length=smbFile.getContentLength();//獲得文件的大小
byte buffer[] = new byte[length] ;
SmbFileInputStream in = new SmbFileInputStream(smbFile) ; //創建smb文件輸入流
while((in.read(buffer)) != -1){
System.out.write(buffer);
System.out.println(buffer.length);
}
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
名詞解釋:
SMB(Server Message Block):通訊協議是微軟(Microsoft)和英特爾(Intel)在1987年制定的協議,主要是做爲Microsoft網絡的通信協議。SMB 是在會話層(session layer)和表示層(presentation layer)以及小部分應用層(application layer)的協議。SMB使用了NetBIOS的應用程序接口 (Application Program Interface,簡稱API)。另外,它是一個開放性的協議,容許了協議擴展——使得它變得更大並且複雜;大約有65個最上層的做業,而每一個做業都超過120個函數,甚至Windows NT也沒有所有支持到,最近微軟又把 SMB 更名爲 CIFS(Common Internet ile System),而且加入了許多新的特點。