本系列文章導航
Apache VFS(1): 基本介紹
Apache VFS(2): 檔案的監聽和監控
Apache VFS(3): 檔案過濾器和選取器
Apache VFS(4): 事件
Apache VFS(5): 使用它!
Apache VFS(6): 幾個重要的概念性介面
Apache VFS(7): 檔案管理工具解析檔案的方法
Apache
VFS
提供了一種虛擬檔案系統,能夠讓你通過程式很方便的和位於本地檔案系統,FTP檔案系統,HTTP檔案打交道。
在Apache
VFS
中核心是FileObject介面
。
它代表一個檔案,和Java
File不同,它具有更多延伸的功能和資訊。實現FileObject介面的檔案對象有很多:例如AbstractFileObjet抽象類別提供了部分
FileObject實現。大部分FileObject實作類別都繼承AbstractFileObject類:
- LocalFile:(很奇怪為什麼不是LocalFileObject)
- FtpFileObject
- HttpFileObject
- SftpFileObject
- ZipFileObject
- TarFileObject
- RamFileObject
- UrlFileObject
- DelegateFileObject
- CompressedFileObject
FileObject代表一個檔案,能夠用來訪問檔案內容和結構。檔案是以階層組織的,每個層次組織形成一個檔案系統。一個檔案系統就像本地作業系統中的檔案系統一樣,例如Windows檔案系統,或者一個Http伺服器,或者一個Zip檔案包。
檔案有兩種類型:目錄
和普通檔案
。普通檔案擁有資料或者說內容,而目錄不含有內容,只能包含其他檔案,普通檔案不能包含其他檔案。
檔案名稱
FileObject擁有一個FileName對象,將檔案名稱字作為一個獨立的對象處理。檔案名稱是不可變的。檔案名稱對象有很多方法:
- getBaseName
- getDepth
- getExtension
- getFriendlyURI
- getParent
- getPath
- getRoot
- 等等
檔案內容的讀取
注意:和Java File不同的是FileObject擁有一個FileContent對象
,如果想訪問檔案內容的話,需要使用FileObject.getFileContent()方法,這個方法返回一個FileContent對象。FileContent代表一個檔案的內容。
簡單的說讀取檔案內容使用:FileContent.getInputStream()
寫內容使用:FileContent.getOutputStream()
FileContent內部有一個final AbstractFileObject
的引用。
FileContent的重要方法有:
- close 關閉檔案內容使用的所有資源,包括所有開啟的檔案流。當心!!
- get/set Attribute/Attributes: 不能用目前,除非自己重寫,其實調用AbstractFileObject的doGet/SetAttribute方法
- getContentInfo 返回一個ContentInfo對象
, ContentInfo對象記錄了內容的類型和編碼資訊
- getInputStream 讀檔案內容
- getOutputStream 寫檔案內容
- isOpen 檢查看看該檔案有沒有開啟的檔案流
- getFile 返回FileObject對象
- get/setLastModifiedTime
檔案的操作
基本的檔案操作例如建立,刪除,重新命名,拷貝都可以通過FileObject來完成。
- copyFrom(FileObject src,FileSelector selector) 從其他地方的源檔案拷貝到這個檔案中,包括源檔案的子檔案,有一個檔案選取器參數和源檔案參數
- delete() 刪除此檔案
- delete(FileSelector selector) 刪除符合檔案選取器的所有該檔案的子檔案
- createFile() 如果這個檔案不存在,建立它
- createFolder() 如果這個目錄不存在,建立它
VFS
為了支援進階的操作例如和版本控制工具配合,提供了FileOperation對象,不過VFS
根本沒有任何實現,如果你想玩,自己玩去吧。
在這裡批判一下VFS
: VFS
的
開發有些地方非常不合理,例如FileObject號稱支援對檔案設定屬性,後來發現其AbstractFileObject的
getAttributes()方法只返回一個空Map,而setAttribute()更離譜,乾脆直接拋出不支援的異常。這個功能非常簡單啊,如果你
需要的話,自己改一下吧。因此,使用VFS
時,千萬注意這些陷阱,誰讓這是開源軟體那 ON YOUR OWN RISK!
文章來源:http://alartin.javaeye.com/blog/92053