使用FileConnection访问文件系统
2007-12-23 12:29:10 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔庣划顖炲Φ閸曨垰绠抽悗锝庝簽娴犻箖姊洪棃娑欐悙閻庢矮鍗抽悰顕€宕堕澶嬫櫖濠殿噯绲剧€笛囧箲閸ヮ剙钃熼柣鏂挎憸閻熷綊鏌涢…鎴濇灈妞ゎ剙鐗嗛—鍐Χ鎼粹€茬凹缂備緡鍠楅幐鎼佹偩閻戣棄纭€闁绘劕绉靛Λ鍐春閳ь剚銇勯幒鎴濐伀鐎规挷绀侀埞鎴︽偐閹绘帩浼€缂佹儳褰炵划娆撳蓟濞戞矮娌柟瑙勫姇椤ユ繈姊洪柅鐐茶嫰婢т即鏌熼搹顐e磳闁挎繄鍋涢埞鎴犫偓锝庘偓顓涙櫊閺屽秵娼幏灞藉帯闂佹眹鍊曢幊鎰閹惧瓨濯撮柛鎾村絻閸撳崬顪冮妶鍡楃仸闁荤啿鏅涢悾鐑藉Ψ瑜夐崑鎾绘晲鎼粹剝鐏嶉梺缁樻尰濞叉﹢濡甸崟顖氱疀闂傚牊绋愮花鑲╃磽娴h棄鐓愭慨妯稿妿濡叉劙骞樼拠鑼槰闂佸啿鎼崐濠毸囬弶搴撴斀妞ゆ梻銆嬪銉︺亜椤撶偛妲婚柣锝囧厴楠炴帡骞嬮弮鈧悗濠氭⒑鐟欏嫭鍎楅柛妯衡偓鐔插徍濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柍閿嬪灦閵囧嫰骞掗崱妞惧缂傚倷绀侀ˇ閬嶅极婵犳氨宓侀柛鈩冪⊕閸婄兘鏌涘┑鍡楊伀妞ゆ梹鍔曢埞鎴︽倻閸モ晝校闂佸憡鎸婚悷锔界┍婵犲洦鍤冮柍鍝勫暟閿涙粓姊鸿ぐ鎺戜喊闁告瑥楠搁埢鎾斥堪閸喓鍘搁柣蹇曞仧绾爼宕戦幘璇茬疀濞达絽鎲¢崐顖炴⒑绾懎浜归悶娑栧劦閸┾偓妞ゆ帒鍟惃娲煛娴e湱澧柍瑙勫灴閹瑩寮堕幋鐘辨闂備礁婀辨灙闁硅姤绮庨崚鎺楀籍閸喎浠虹紓浣割儓椤曟娊鏁冮崒娑氬幈闂佸搫娲㈤崝宀勬倶閻樼粯鐓曢柟鑸妼娴滄儳鈹戦敍鍕杭闁稿﹥鐗犲畷婵嬫晝閳ь剟鈥﹂崸妤€鐒垫い鎺嶈兌缁犲墽鈧厜鍋撳┑鐘辩窔閸嬫鈹戦纭烽練婵炲拑绲垮Σ鎰板箳閹冲磭鍠撻幏鐘绘嚑閼稿灚姣愰梻鍌氬€烽懗鑸电仚濠电偛顕崗妯侯嚕椤愩倖瀚氱€瑰壊鍠栧▓銊︾節閻㈤潧校缁炬澘绉瑰鏌ュ箵閹烘繄鍞甸柣鐘烘鐏忋劌顔忛妷褉鍋撶憴鍕碍婵☆偅绻傞~蹇涙惞閸︻厾锛滃┑鈽嗗灠閹碱偊锝炲鍥╃=濞达綁顥撻崝宥夋煙缁嬪灝鏆遍柣锝囧厴楠炲鏁冮埀顒傜不婵犳碍鍋i柛銉戝啰楠囬悗瑙勬尭缁夋挳鈥旈崘顔嘉ч柛鈩兠棄宥囩磽娴e壊鍎愰柛銊ュ缁顓兼径瀣偓閿嬨亜閹哄秶顦︾€殿喖鐏濋埞鎴﹀煡閸℃浠梺鍛婎焼閸曨収娲告俊銈忕到閸燁垶宕愰崹顐e弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

The FileConnection API specified in JSR-75 gives access to the local file systems on devices like PDA. In order to overcome security issues MIDlet needs to include requested file permission in its JAD file under MIDLet-Permission PRoperty.The example below has a file browser to move around the file system, select and read images stored in its local image Directory.
import java.util.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class FileMidlet extends MIDlet implements CommandListener
{
private String currDirName;
private Command view = new Command("View", Command.ITEM, 1);
private Command back = new Command("Back", Command.BACK, 2);
private Command exit = new Command("Exit", Command.EXIT, 3);
private final static String UP_DIRECTORY = "..";
private final static String MEGA_ROOT = "/";
private final static String SEP_STR = "/";
private final static char SEP = '/';
public FileMidlet()
{
currDirName = MEGA_ROOT;
}
public void startApp()
{
boolean isAPIAvailable = false;
if (System.getProperty(
"microedition.io.file.FileConnection.version") != null)
{
isAPIAvailable = true;
try
{
showCurrDir();
}
catch (SecurityException e)
{}
catch (Exception e) {}
}
else
{
StringBuffer splashText = new StringBuffer(
getAppProperty("MIDlet-Name")).append("\n").append(
getAppProperty("MIDlet-Vendor")).
append(isAPIAvailable?"":"\nFileConnection API not available");
Alert splashScreen = new Alert(null,splashText.toString(),
null,AlertType.INFO);
splashScreen.setTimeout(3000);
Display.getDisplay(this).setCurrent(splashScreen);
}
}
public void pauseApp() {}
public void destroyApp(boolean cond)
{
notifyDestroyed();
}
public void commandAction(Command c, Displayable d)
{
if (c == view)
{
List curr = (List)d;
final String currFile = curr.getString(curr.getSelectedIndex());
new Thread(new Runnable()
{
public void run()
{
if (currFile.endsWith(SEP_STR)
currFile.equals(UP_DIRECTORY))
{
traverseDirectory(currFile);
} else
{
showFile(currFile);
}
}
}).start();
}
else if (c == back)
{
showCurrDir();
}
else if (c == exit)
{
destroyApp(false);
}
}
void showCurrDir()
{
Enumeration e;
FileConnection currDir = null;
List browser;
try
{
if (MEGA_ROOT.equals(currDirName))
{
e = FileSystemRegistry.listRoots();
browser = new List(currDirName, List.IMPLICIT);
}
else
{
currDir = (FileConnection)Connector.open(
"file://localhost/" + currDirName);
e = currDir.list();
browser = new List(currDirName, List.IMPLICIT);
browser.append(UP_DIRECTORY);
}
while (e.hasMoreElements())
{
String fileName = (String)e.nextElement();
if (fileName.charAt(fileName.length()-1) == SEP)
{
browser.append(fileName);
}
else
{
browser.append(fileName);
}
}
browser.setSelectCommand(view);
browser.addCommand(exit);
browser.setCommandListener(this);
if (currDir != null)
{
currDir.close();
}
Display.getDisplay(this).setCurrent(browser);
}
catch (IOException ioe)
{}
}
void traverseDirectory(String fileName)
{
if (currDirName.equals(MEGA_ROOT))
{
if (fileName.equals(UP_DIRECTORY))
{
// can not go up from MEGA_ROOT
return;
}
currDirName = fileName;
}
else if (fileName.equals(UP_DIRECTORY))
{
// Go up one directory
// TODO use setFileConnection when implemented
int i = currDirName.lastIndexOf(SEP, currDirName.length()-2);
if (i != -1)
{
currDirName = currDirName.substring(0, i+1);
}
else
{
currDirName = MEGA_ROOT;
}
}
else
{
currDirName = currDirName + fileName;
}
showCurrDir();
}
void showFile(String fileName)
{
try
{
FileConnection fc = (FileConnection)
Connector.open("file://localhost/" + currDirName + fileName);
if (!fc.exists())
{
throw new IOException("File does not exists");
}
InputStream fis = fc.openInputStream();
byte[] b = new byte[1024];
int length = fis.read(b, 0, 1024);
fis.close();
fc.close();
TextBox tb = new TextBox("View File: " + fileName, null, 1024,
TextField.ANY TextField.UNEDITABLE);
tb.addCommand(back);
tb.addCommand(exit);
tb.setCommandListener(this);
if (length > 0)
{
tb.setString(new String(b, 0, length));
}
Display.getDisplay(this).setCurrent(tb);
}
catch (Exception e) {}
}
}
(出处:http://www.cncms.com)
Tags:使用 FileConnection 访问
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接