(1)判斷 手機是否支持文件系統
/**
* 檢測手機是否支持文件系統
* @return
*/
public boolean isSupportFileSystem(){
String v = System
.getProperty("microedition.io.file.FileConnection.version");
if(v!=null)return true;
return false;
}
通過判斷System的Property是否存在來判斷。
(2)打開文件連接
無論是要讀文件還是要寫文件,首先必須得到該文件的Connection。
使用Connector.open方法,有2個參數,第一個參數是路徑,第二個參數是權限。
權限沒什麼好說的了,一共就3個可能:Connector.READ、Connector.WRITE、Connector.READ_WRITE。
現在來說說路徑,路徑是以URL形式書寫的,以"file://"開頭,如果是本機上的文件就加上localhost,即如果是E:/a.dat文件的路徑應該是"file://localhost/E:/a.dat"。
順便說說手機的目錄結果,由於我是使用S60第3版的機器進行測試,所以介紹一下其目錄結構。KJava程序可訪問的驅動器就2個:C和E(如果有擴展卡)。E驅動器下所有目錄文件都可以訪問,路徑是E:/開始;C驅動則不是,只有圖片、聲音和影像三個目錄可以訪問,訪問其它目錄將拋SecurityException,其這三個目錄的路徑分別是C:/data/Images、C:/data/Sounds、C:/data/Videos。怎麼知道有哪些目錄可以訪問呢,很簡單把WTK自帶的PDADemo放在手機上,運行FileBrowser測試一下就行了。
FileConnection fc = (FileConnection)
Connector.open(file://localhost/E:/a.dat , Connector_READ_WRITE);
(3)讀文件
InputStream fis = fc.openInputStream();
很簡單,就是用openInputStream打開一個流,和讀取網絡數據一樣,這裡就不贅述了。
(4)寫文件
byte[] b="Hello World".getBytes();
OutputStream fos = fc.openOutputStream();
fos.write(b,0,b.length);
使用方法也是和寫網絡數據一樣,打開一個OutputStream就可以了,不過有一點要注意的(在N93上測試的結果,其它機器不清楚),寫文件總是從開頭開始寫,而且不會清空原來的內容。例如本來文件中有內容abcdefghijk,再打開文件往裡面寫入123,最後文件的內容是什麼呢?不是abcdefghijk123,也不是123,而是123defghijk。那麼需要續寫文件怎麼辦?我的做法的先把原內容讀出到一個StringBuffer中,再續寫在StringBuffer裡,再寫入文件,不知道還有沒有更方便的方法。