如果讀者還不了解J2ME可選包的概念,請參考介紹J2ME可選包的概念;如果讀者想了解PIM的詳細概念和使用請參考J2ME可選包—PIM介紹。
我們知道在J2ME中可以訪問Jar包內的文件,比如讀取其中的文本文件。但是我們不能創建新的文件,在MIDP中提供了Record Management System(RMS)子系統來實現本地的持久性存儲。之所以沒有提供文件操作的支持,主要是因為支持文件系統的移動信息設備非常的少,有些手機也是在擴展卡上提供了文件系統的支持,而不是主存上。FCOP就是為了解決這個問題的,FCOP是基于Connected Limited Devices Configuration(CLDC)的,因此它可以無縫的移植到Connected Devices Configuration(CDC)兼容的設備上。
使用FCOP操作文件主要通過兩種途徑:
1.第一種方式是針對通過Generic Connection Framework(GCF)來訪問文件系統的平臺,這時候你可以通過在URL中使用file://格式來訪問文件,比如:
...
import javax.microedition.io.*;
String url = "file:///data.txt";
InputConnection conn = null;
int mode = Connector.READ_ONLY;
try {
conn =(InputConnection) Connector.open( url, mode );
}
catch( IOException ioe ){
// no file
}
...
這種情況下,即使你的選定的設備不支持FCOP也是可行的。CDC兼容的設備都可以選擇這樣的方式來訪問文件系統的文件。通過制定mode為Connector.READ_WRITE和Connector.WRITE_ONLY并返回StreamConnection或者OutputConnection就可以進行寫文件了。
2.第二種方法是通過使用FileConnection來進行文件的讀寫操作,首先你必須檢查選定的設備是否支持FileConnection。通過如下方式:
...
// Check that the File Connection Optional Package is there
String v = System.getPRoperty(
"microedition.io.file.FileConnection.version" );
if( v != null ){
// FCOP available
} else {
// FCOP not available
}
...
如果v返回為null那么說明不支持FCOP,否則應該返回版本號,比如1.0。
使用FileConnection的時候同樣是按照GCF的訪問方式,這時候你還是應該使用file://作為URL的前綴,返回類型為FileConnection的接口,FileConnection接口擴展了StreamConnection,并且添加了很多對文件進行操作的方法,這些方法和java.io.File十分類似。通常你提供的URL應該類似如下形式
http://www.j2medev.com/Article/Class1/Class16/200503/file:///SDCard/users.txt
在WTK 2.2中提供了對FCOP的支持,你可以使用WTK22做相關的程序開發,注意使用FCOP的時候你首先應該掛載文件系統。后面的一篇文章將詳細介紹如何使用FCOP以及WTK22對FCOP的支持。
下面的代碼演示了如何列舉出目錄下的文件:
...
String url = "file:///SDCard";
FileConnection conn = null;
try {
conn = (FileConnection) Connector.open( url );
if( conn.isDirectory() ){
Enumeration names = conn.list();
while( names.hasMoreElements() ){
String name = (String) e.nextElement();
// do something
}
} else {
// not a directory!
}
}
catch( IOException e ){
// could not access the URL
}
catch( SecurityException e ){
// no permission to read the directory
}
...
如果文件不存在你也可以使用FileConnection.create()來創建文件。代碼如下:
...
String url = "http://www.j2medev.com/Article/Class1/Class16/200503/file:///SDCard/myfile.txt";
FileConnection conn = null;
try {
conn = (FileConnection) Connector.open( url,
Connector.WRITE_ONLY );
if( conn.create() ){ // create the file
OutputStream out = conn.openOutputStream();
// now write data to the file
}
conn.close();
}
catch( IOException e ){
// error
}
catch( SecurityException e ){
// no permission to create/write
}
...
在java.microedition.io.file中提供了一個FileSystemRegistry類用于查詢可用的文件系統,當然也有一些其他的作用,在下文中降做詳細介紹。我們應該注意FileConnection中的方法都有可能拋出SecurityException。但是FCOP并沒有定義相關的安全模型,而是把這個任務留給了配置(Configuration)和簡表(Profile)。比如MIDP2.0中定義的安全模型。
總結:本文簡單介紹了FCOP的概念以及基本的使用,建議大家參考FCOP的java doc獲得更多的使用信息,讀者可以從http://jcp.org 獲得關于jsr75的規范和文檔。
(出處:http://www.survivalescaperooms.com)
新聞熱點
疑難解答