JSR-75 (FileConnection API) 賦予 J2ME 應用訪問手機本地文件系統的能力。本文針對常見操作場景,整理了從環境檢測到讀寫實踐的完整技術要點,基於 S60v3 實機測試驗證。
通過檢查系統屬性 microedition.io.file.FileConnection.version 是否存在來判斷:
public boolean isSupportFileSystem() {
String v = System.getProperty("microedition.io.file.FileConnection.version");
return v != null;
}
採用 file:// 協議,本機文件需加 localhost 前綴:
file://localhost/E:/data.txtConnector.READ:唯讀Connector.WRITE:唯寫Connector.READ_WRITE:讀寫| 驅動器 | 可訪問路徑 | 備註 |
|---|---|---|
| E: | 所有目錄 | 需記憶卡支援 |
| C: | C:/data/Images C:/data/Sounds C:/data/Videos | 其他目錄拋出 SecurityException |
可通過 WTK 自帶的 PDADemo -> FileBrowser 實測具體可訪問路徑。
FileConnection fc = (FileConnection) Connector.open(
"file://localhost/E:/a.dat", Connector.READ_WRITE);
獲取輸入流後按標準流讀取邏輯處理:
InputStream fis = fc.openInputStream(); // 後續邏輯同網絡數據讀取
byte[] data = "Hello World".getBytes(); OutputStream fos = fc.openOutputStream(); fos.write(data, 0, data.length);
寫入總是從文件開頭開始,且不會自動清空原有內容。
abcdefghijk123 後:123defghijk(而非追加或截斷)StringBuffer目前未發現更優雅的原生追加 API,歡迎補充。
String szFileName = "file:///root1/text.txt"; FileConnection fconn = (FileConnection) Connector.open(szFileName); InputStream in = fconn.openInputStream(); // 讀取邏輯... // 寫入邏輯...
JSR-75 雖功能強大,但不同廠商實現差異大,權限控制嚴格。實際開發中務必在目標機型上充分測試路徑訪問與讀寫行為,並妥善處理異常分支。