J2ME的檔案系統運用(一)
這幾天初次開始學習運用手機的檔案系統,在網上也搜尋了一些資料,通過不斷地嘗試和運用,對手機的檔案系統也瞭解不少。
1、手機的檔案系統
手機的檔案系統就像電腦的硬碟一樣,供使用者儲存資料夾和檔案。在wtk2.52的模擬器下,預設的根目錄為root1/,底下有一個子資料夾photos/。在Nokia 的機器上,手機儲存的根目錄為C:/,儲存卡的目錄為E:/。操作手機的檔案系統條件:手機要支援JSR75,對於未簽名的MIDlet程式還要在程式管理中設定相應的許可權才能操作檔案系統。
2、JSR75
如果你沒有JSR75的api,到這裡可以下載。
JSR75包括FileSystem部分和PIM部分,現在還沒用到PIM部分,暫時不考慮。下面簡單的介紹些FileSystem所用到的一些類和介面:
- ConnectionClosedException —— 當試圖對一個已經關閉的 FileConnection 物件進行操作時,會丟擲此異常。
- FileConnection —— 這是一個很關鍵的類,基本上檔案讀寫都是有該類完成。可以從字面上去理解它的意思。
- FileSystemEventHandler —— 這個類我也沒用過,不知道它具體的功能。
- FileSystemListener —— 用於監聽檔案系統目錄狀態的變化,比如檔案的刪除、新增,儲存卡的拔出和插入等。
- FileSystemRegistry —— 用於管理和跟蹤檔案系統的監聽器,以及可以通過此類得到所有檔案系統的根目錄。
- IllegalModeException —— 檔案開啟模式異常,當試圖寫入以只讀方式開啟的檔案時,會丟擲該異常。
3、我個人對檔案系統的理解
首先操作FileSystem最常用的類是FileConnection,結合流的操作進行檔案的讀和寫。操作檔案很像操作網路連線,一個是FileConnection,一個則是HttpConnection,兩者在操作時都需要一個url(路徑),檔案系統是localhost,HttpFileConnection則是請求一個網路連線。所以我把檔案系統的操作也理解為請求,只不過沒有POST和GET之分。
4.簡單示例
下面的示例裡面提供了列出根目錄,以及目標資料夾下的檔案和資料夾的方法,檔案和資料夾的區別在於檔名包含”/”字元。
經過我在N95 的機器上測試,C:/,C:/data/我們是無法進行讀寫的,通過應用程式只能夠讀取到C:/data/下的sounds/,images/,videos/這三個資料夾,即使在Nokia真機上的C:/data/下包含別的檔案或資料夾,應用程式也無法讀取到。
/** * * @author 水貨程式設計師 */ public class FileSystem { /** * 判斷是否支援檔案系統 * @return */ public boolean isFileSystemSupport() { String version = System.getProperty("microedition.io.file.FileConnection.version"); if (version == null) { return false; } return true; } /** * 獲取所有根目錄 * @return */ private Vector getRoots() { Vector rootVector = new Vector(); Enumeration enums = FileSystemRegistry.listRoots(); while (enums.hasMoreElements()) { String rootName = enums.nextElement().toString(); rootVector.addElement(rootName); } return rootVector; } /** * 獲取目標資料夾下的所有直系子資料夾 * @param path * @return */ public Vector getFolders(String path) { Vector folderVector = new Vector(); try { FileConnection fc = (FileConnection) Connector.open(path, Connector.READ); if (fc.exists()) { boolean isFolder = fc.isDirectory(); if (isFolder) { Enumeration enums = fc.list(); while (enums.hasMoreElements()) { String name = enums.nextElement().toString(); //如果有斜槓,就是資料夾 if (name.indexOf("/") > 0) { folderVector.addElement(name); } } } } fc.close(); } catch (IOException ex) { ex.printStackTrace(); } return folderVector; } /** * 獲取目標資料夾下的所有檔案 * @param path * @return */ public Vector getFiles(String path) { Vector fileVector = new Vector(); try { FileConnection fc = (FileConnection) Connector.open(path, Connector.READ); if (fc.exists()) { boolean isFolder = fc.isDirectory(); if (isFolder) { Enumeration enums = fc.list(); while (enums.hasMoreElements()) { String name = enums.nextElement().toString(); //如果沒有斜槓,就是檔案 if (name.indexOf("/") < 0) { fileVector.addElement(name); } } } } fc.close(); } catch (IOException ex) { ex.printStackTrace(); } return fileVector; } /** * 獲取目標資料夾下的所有檔案和直系子資料夾 * @param path * @return */ public Vector getFoldersAndFiles(String path) { Vector v = new Vector(); try { FileConnection fc = (FileConnection) Connector.open(path, Connector.READ); if (fc.exists()) { boolean isFolder = fc.isDirectory(); if (isFolder) { Enumeration enums = fc.list(); while (enums.hasMoreElements()) { String name = enums.nextElement().toString(); v.addElement(name); } } } fc.close(); } catch (IOException ex) { ex.printStackTrace(); } return v; } }
程式碼用法舉例:如果要獲取C:/data/images/底下的檔案列表,我們在傳入path時應該這樣寫
FileSystem fs = new FileSystem();
Vector v = fs.getFiles(“files:///c:/data/images/”);
相關文章
- 檔案系統(十):一文看懂 UBI 檔案系統
- 檔案系統(九):一文看懂yaffs2檔案系統原理
- Linux系統篇-檔案系統&虛擬檔案系統Linux
- 檔案和檔案系統
- linux的檔案系統Linux
- Mac的檔案系統Mac
- Linux運維中一個檔案系統由哪幾部分組成?Linux運維
- fsutil,您可以執行多種檔案系統操作,包括查詢和設定檔案系統特性,refsutil 是用於管理和維護ReFS檔案系統的實用程式 管理ReFS檔案系統的命令列工具命令列
- 檔案系統
- 檔案系統(六):一文看懂linux ext4檔案系統工作原理Linux
- 檔案系統修復的一個過程
- 檔案系統(五):exFAT 檔案系統原理詳解
- Linux系統檔案系統及檔案基礎篇Linux
- Xamarin Essentials應用教程檔案系統FileSystem
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- nodejs中的檔案系統NodeJS
- 【檔案系統】嵌入式檔案系統Fatfs簡介
- spark直接讀取本地檔案系統的檔案Spark
- debugfs檔案系統
- Linux檔案系統Linux
- FUSE檔案系統
- 檔案系統安全
- [Linux]檔案系統Linux
- 檔案系統(七):檔案系統崩潰一致性、方法、原理與侷限
- 教你用 buildroot 構建根檔案系統UI
- 檔案系統(四):FAT32檔案系統實現原理
- 檔案系統(十一):Linux Squashfs只讀檔案系統介紹Linux
- 學生成績管理系統(C++指標、連結串列、檔案及物件導向的運用)C++指標物件
- Hadoop 系列(一)—— 分散式檔案系統 HDFSHadoop分散式
- iMazing檔案系統檢視一覽表
- 檔案描述符和檔案系統
- Linux系統中常見的檔案系統有哪些?Linux
- Linux系統掛載win系統的共享檔案Linux
- Linux檔案系統的實現Linux
- [轉載]btrfs檔案系統的kali linux 用snapper建立快照LinuxAPP
- 根檔案系統簡介與BusyBox構建根檔案系統
- 一種基於記憶體的檔案系統tmpfs記憶體
- 何在Mac系統上建立大檔案?教你在Mac系統建立大檔案的方法Mac