- 浏览: 235565 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
lliiqiang:
打开多个页面就没有办法同时提交了。
jsp 表单防止重复提交(简单版) -
mponeno:
check,只是判断空的,应该没什么所谓,用StringUti ...
java判断文件是否为图片 已图片后缀名为依据 -
puqingluochen:
源码能打包发给我吗,谢谢了。
Extjs Grid 编辑 新增 删除 保存 (爽) -
java麦克斯泰:
getJSONString()
这个方法都没调用 不是完整 ...
extjs tree异步加载 完整版 -
yehoubin:
你好,我的虚拟机上的是Mac OS X leopard的,可以 ...
iPad 和 iPhone Simulator Mac.OS.X.Leopard
JSR 75(PDA Optional Packages for the J2METM Platform)中定义了两个可选包:
1.PIM (The Personal Information Management)API,提供对个人信息数据的访问,一般包括名片夹,日历项,和待办事项。
2.FC(The FileConnection) APIs,提供对本地文件系统的访问。
本文简单讲解FC API的特性的用法。
一、FC API与RMS
简单地写一点,这两个东东其实没有可比性,功能侧重不同,FC APIs提供了MIDlets与本地文件和其它应用的交互,比如我们可以通过 FC API在MIDlets中打开外部的各种文件,并且保存一些极大的资源,这一点RMS没有办法做到的,FC API并不是强制实现的。
RMS用来存储程序中的一些数据,FC API不会取代RMS。
二、FC API简介
1.FC API中的类和接口
接口:
javax.microedition.io.file.FileConnection,继承自CLDC中的javax.microedition.StreamConnection;
javax.microedition.io.file.FIleSystemListener,用于监听文件系统目录状态变化的通知,比如文件的删除和新增,存储卡的拨出的插入;onnectionClosed
类:
javax.microedition.io.file.FileSystemRegistry,用于获取当前所有文件的根目录和管理跟踪文件系统的监听器;
javax.microedition.io.file.IllegalModeException,文件打开模式异常,当试图写入以只读方式打开的文件时,该异常会被抛出;
javax.microedition.io.file.ConnectionClosedException,当试图对一个已经关闭的FileConnection对像作操作时,该异常会被抛出。
2.验证系统是否支持FC API
可以通过系统属性来验证手机是否支持FC API:
System.getProperty("microedition.io.file.FileConnection.version");
如果支持的话,会返回FC API的版本号,一般是1.0,
如果不支持,则返回null,
现在支持FC API的手机非常少,
MOTO的A1系列手机有几款支持,我手上用过的V635就支持。
(说明一下,MOTO用的是自己的包com.motorola.io.file,但和FC几乎一样)
三、FC API的使用
1.打开一个文件
将使用file协议的url传入Connector以创建FileConnection类,可以以READ,READ_WRITE和WRITE三种方式打开,代码如下:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
}
catch(Exception e){
log("open file error:"+e); //大家当成System.out.println()就好
}
值得注意的是,如果文件不存在的话,语句也可以正常执行,并不会抛出任何异常,所以,为了避免后续操作中不必要的麻烦,我们要用fconn.exists()方法来自己判断文件是否存在:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
if(fconn.exist()){
//..........................
}
else{//..................................}
}
catch(Exception e){
log("open file error:"+e);
}
2.对文件的读写操作
读文件:
通过InputStream从FileConnection读取,然后自己再对InputStream做解析,用法很简单,和读取 HttpConnection差不多,附上以前程序里的一段详细代码,是用来读取播放列表文件的,程序中为了方便,是使用DataInputStream 直接读的,没有用到InputStream,实际上原理是一样的:
private void loadLists(){
log("try open playlist");
musicList.removeAllElements();//musicList是一个Vector,在本段代码之外定义并初始化
FileConnection fconn = null;
DataInputStream dis = null;
try{
//以只读模式打开playlist.txt文件
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
dis=fconn.openDataInputStream();//开输入流
String tmp=null;
do{
try{
tmp=dis.readUTF();//读文件路径
} catch(Exception e){
tmp = null;
}
if(tmp != null){
OneMusic onemusic=new OneMusic();
onemusic.filepath=tmp;
onemusic.filename=dis.readUTF();//读文件名
onemusic.filesize=dis.readLong();//读文件大小
musicList.addElement(onemusic);
}
}while(tmp!=null);
log("playlist loaded");
dis.close();
fconn.close();
}
catch(Exception e){
e.printStackTrace();
}
}
写文件:
通过OutputStream向FileConnection写入,附上写入播放列表的代码,同样我也用的是DataOutputStream,
private void saveLists(){
log("try save playlist");
FileConnection fconn = null;
DataOutputStream ous = null;
try{
//以读写模式打开
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ_WRITE);
if(!fconn.exists()){//判断文件是否存在,如果不是,则新建一个
NpPlayer.instance.showlog.dealReportMsg("playlist not exists ,create");
fconn.create(); // create the file if it doesn't exist
log("playlist created!!");
} else {//如果文件存在,则将旧的文件删除,建立一个新文件
fconn.delete();
log("playlist exists,delete");
fconn.create();
log("playlist created!!");
}
ous = fconn.openDataOutputStream() ;
log("saving playlists....");
for(int i=0;i<musicList.size();i++){//将音乐列表按路径,文件名,文件大小的格式写入播放列表文件中
OneMusic onemusic;
onemusic=(OneMusic)musicList.elementAt(i);
byte[] temp = null;
ByteArrayOutputStream bos =new ByteArrayOutputStream() ;
DataOutputStream dos =new DataOutputStream (bos) ;
dos.writeUTF(""+onemusic.filepath);
dos.writeUTF(""+onemusic.filename);
dos.writeLong(onemusic.filesize);
temp=bos.toByteArray();
dos.close();
bos.close();
ous.write(temp,0,temp.length);
}
ous.flush();
ous.close();
fconn.close();
log("playlist saved!!");
}
catch(Exception e){
e.printStackTrace();
}
finally {
try{
if (ous != null)
ous.close();
} catch (Exception closee){}
try{
if (fconn != null)
fconn.close();
} catch (Exception closee){}
}
}
3.对目录的操作
判断是文件还是目录,使用isDirectory()方法
boolean isdir = fconn.isDirectory();
指定完整的路径和目录名后调用方法mkdir()来创建新的目录:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/mymusic",Connector.READ_WRITE);
fconn.mkdir();
}
catch(Exception e){}
列目录下的所有内容,用list()方法,此方法返回一个java.util.Enumeration类的对像
java.util.Enumeration enu = fconn.list();
接下来就可以通过java.util.Enumeration中的hasMoreElements()方法来判断目录下是否还有内容并进行相应操作
while(enu.hasMoreElements()){
//.....................................
}
说明一点,此处返回的是一个java.util.Enumeration类的对像,实际上就是一个String数组,这一点参考FC API文档:
public java.util.Enumeration list() throws java.io.IOException
Gets a list of all visible files and directories contained in a directory. The directory is the connection's target as specified in Connector.open().
Returns: An Enumeration of strings, denoting the files and directories in the directory...................
...................................
所以,也可以使用这样的方法:String[] tmp = fconn.list(),然后自己处理一下这个数组就行了。
4.监听文件系统的变化
可以用FileSystemListener来监听文件系统的改变(增加,删除,修改),以便作出响应,
在此以存储卡的拨出和插入为例,代码是找的现成的:)
public class FSListener implements FileSystemListener{
public void stateChanged(int state,String name){
if(state == FileSystemListener.ROOT_REMOVED)
//root removed
else if(state == FileSystemListener.ROOT_ADDED)
//root added
}
}
注册监听到FileSystemRegistry:
FileSystemListener listener = new FSListener();
FileSystemRegistry.addFileSystemListener(listener);
四、FC API的安全性
对于未经过签名的MIDlet,在每次使用FC API读取文件时,都会提示用户是否允许,非常烦人.
并且不允许对文件进行写操作,而MOTO自己的包更是狠,没有认证的程序是不能读取任何文件的。。。所以几乎没用
如果程序中要用到FC API的话,最好还是去找产商认证一下,会大大提供程序的友好性。
1.PIM (The Personal Information Management)API,提供对个人信息数据的访问,一般包括名片夹,日历项,和待办事项。
2.FC(The FileConnection) APIs,提供对本地文件系统的访问。
本文简单讲解FC API的特性的用法。
一、FC API与RMS
简单地写一点,这两个东东其实没有可比性,功能侧重不同,FC APIs提供了MIDlets与本地文件和其它应用的交互,比如我们可以通过 FC API在MIDlets中打开外部的各种文件,并且保存一些极大的资源,这一点RMS没有办法做到的,FC API并不是强制实现的。
RMS用来存储程序中的一些数据,FC API不会取代RMS。
二、FC API简介
1.FC API中的类和接口
接口:
javax.microedition.io.file.FileConnection,继承自CLDC中的javax.microedition.StreamConnection;
javax.microedition.io.file.FIleSystemListener,用于监听文件系统目录状态变化的通知,比如文件的删除和新增,存储卡的拨出的插入;onnectionClosed
类:
javax.microedition.io.file.FileSystemRegistry,用于获取当前所有文件的根目录和管理跟踪文件系统的监听器;
javax.microedition.io.file.IllegalModeException,文件打开模式异常,当试图写入以只读方式打开的文件时,该异常会被抛出;
javax.microedition.io.file.ConnectionClosedException,当试图对一个已经关闭的FileConnection对像作操作时,该异常会被抛出。
2.验证系统是否支持FC API
可以通过系统属性来验证手机是否支持FC API:
System.getProperty("microedition.io.file.FileConnection.version");
如果支持的话,会返回FC API的版本号,一般是1.0,
如果不支持,则返回null,
现在支持FC API的手机非常少,
MOTO的A1系列手机有几款支持,我手上用过的V635就支持。
(说明一下,MOTO用的是自己的包com.motorola.io.file,但和FC几乎一样)
三、FC API的使用
1.打开一个文件
将使用file协议的url传入Connector以创建FileConnection类,可以以READ,READ_WRITE和WRITE三种方式打开,代码如下:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
}
catch(Exception e){
log("open file error:"+e); //大家当成System.out.println()就好
}
值得注意的是,如果文件不存在的话,语句也可以正常执行,并不会抛出任何异常,所以,为了避免后续操作中不必要的麻烦,我们要用fconn.exists()方法来自己判断文件是否存在:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
if(fconn.exist()){
//..........................
}
else{//..................................}
}
catch(Exception e){
log("open file error:"+e);
}
2.对文件的读写操作
读文件:
通过InputStream从FileConnection读取,然后自己再对InputStream做解析,用法很简单,和读取 HttpConnection差不多,附上以前程序里的一段详细代码,是用来读取播放列表文件的,程序中为了方便,是使用DataInputStream 直接读的,没有用到InputStream,实际上原理是一样的:
private void loadLists(){
log("try open playlist");
musicList.removeAllElements();//musicList是一个Vector,在本段代码之外定义并初始化
FileConnection fconn = null;
DataInputStream dis = null;
try{
//以只读模式打开playlist.txt文件
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ);
dis=fconn.openDataInputStream();//开输入流
String tmp=null;
do{
try{
tmp=dis.readUTF();//读文件路径
} catch(Exception e){
tmp = null;
}
if(tmp != null){
OneMusic onemusic=new OneMusic();
onemusic.filepath=tmp;
onemusic.filename=dis.readUTF();//读文件名
onemusic.filesize=dis.readLong();//读文件大小
musicList.addElement(onemusic);
}
}while(tmp!=null);
log("playlist loaded");
dis.close();
fconn.close();
}
catch(Exception e){
e.printStackTrace();
}
}
写文件:
通过OutputStream向FileConnection写入,附上写入播放列表的代码,同样我也用的是DataOutputStream,
private void saveLists(){
log("try save playlist");
FileConnection fconn = null;
DataOutputStream ous = null;
try{
//以读写模式打开
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/playlist.txt",Connector.READ_WRITE);
if(!fconn.exists()){//判断文件是否存在,如果不是,则新建一个
NpPlayer.instance.showlog.dealReportMsg("playlist not exists ,create");
fconn.create(); // create the file if it doesn't exist
log("playlist created!!");
} else {//如果文件存在,则将旧的文件删除,建立一个新文件
fconn.delete();
log("playlist exists,delete");
fconn.create();
log("playlist created!!");
}
ous = fconn.openDataOutputStream() ;
log("saving playlists....");
for(int i=0;i<musicList.size();i++){//将音乐列表按路径,文件名,文件大小的格式写入播放列表文件中
OneMusic onemusic;
onemusic=(OneMusic)musicList.elementAt(i);
byte[] temp = null;
ByteArrayOutputStream bos =new ByteArrayOutputStream() ;
DataOutputStream dos =new DataOutputStream (bos) ;
dos.writeUTF(""+onemusic.filepath);
dos.writeUTF(""+onemusic.filename);
dos.writeLong(onemusic.filesize);
temp=bos.toByteArray();
dos.close();
bos.close();
ous.write(temp,0,temp.length);
}
ous.flush();
ous.close();
fconn.close();
log("playlist saved!!");
}
catch(Exception e){
e.printStackTrace();
}
finally {
try{
if (ous != null)
ous.close();
} catch (Exception closee){}
try{
if (fconn != null)
fconn.close();
} catch (Exception closee){}
}
}
3.对目录的操作
判断是文件还是目录,使用isDirectory()方法
boolean isdir = fconn.isDirectory();
指定完整的路径和目录名后调用方法mkdir()来创建新的目录:
FileConnection fconn = null;
try{
fconn = (FileConnection)Connector.open("file:///a/mobile/audio/mymusic",Connector.READ_WRITE);
fconn.mkdir();
}
catch(Exception e){}
列目录下的所有内容,用list()方法,此方法返回一个java.util.Enumeration类的对像
java.util.Enumeration enu = fconn.list();
接下来就可以通过java.util.Enumeration中的hasMoreElements()方法来判断目录下是否还有内容并进行相应操作
while(enu.hasMoreElements()){
//.....................................
}
说明一点,此处返回的是一个java.util.Enumeration类的对像,实际上就是一个String数组,这一点参考FC API文档:
public java.util.Enumeration list() throws java.io.IOException
Gets a list of all visible files and directories contained in a directory. The directory is the connection's target as specified in Connector.open().
Returns: An Enumeration of strings, denoting the files and directories in the directory...................
...................................
所以,也可以使用这样的方法:String[] tmp = fconn.list(),然后自己处理一下这个数组就行了。
4.监听文件系统的变化
可以用FileSystemListener来监听文件系统的改变(增加,删除,修改),以便作出响应,
在此以存储卡的拨出和插入为例,代码是找的现成的:)
public class FSListener implements FileSystemListener{
public void stateChanged(int state,String name){
if(state == FileSystemListener.ROOT_REMOVED)
//root removed
else if(state == FileSystemListener.ROOT_ADDED)
//root added
}
}
注册监听到FileSystemRegistry:
FileSystemListener listener = new FSListener();
FileSystemRegistry.addFileSystemListener(listener);
四、FC API的安全性
对于未经过签名的MIDlet,在每次使用FC API读取文件时,都会提示用户是否允许,非常烦人.
并且不允许对文件进行写操作,而MOTO自己的包更是狠,没有认证的程序是不能读取任何文件的。。。所以几乎没用
如果程序中要用到FC API的话,最好还是去找产商认证一下,会大大提供程序的友好性。
发表评论
-
点阵字库在J2ME中的实现
2010-02-05 14:05 1169点阵字库在J2ME中的实现 关于点阵字库在J ... -
J2ME移植到ophone
2009-11-12 09:10 1042中国拥有世界最庞大的电信客户群,仅移动用户就达7亿,3G在中国 ... -
手机编程关于socket实例代码
2009-11-13 23:39 1195最近有很多网友也许是刚刚接触socket 这个套接字 协议通讯 ... -
KXML:J2ME中的XML语法分析利器
2009-11-19 15:19 1457Enhydra的KXML是一个只占 ... -
用J2ME实现简单电子邮件发送功能
2009-11-21 12:56 1038在GCF中并没有提供给我们能够发送电子邮件的API,J2ME的 ... -
J2ME 下的 Base64的编码与解码
2009-11-23 12:05 1253以前以为用J2EE里面的rt.jar 就能成功的引入到j2me ... -
五十音图
2009-11-27 11:34 1384日语的每个假名代表一 ... -
J2me蓝牙打印开发
2009-12-19 21:49 1764Java代码 Stringurl=ser ... -
WM 注册表 常用设置
2010-01-21 17:36 35701、注册表内容 大致上可以分为四组 HKEY_CLASSES_ ... -
iPad 和 iPhone Simulator Mac.OS.X.Leopard
2010-01-29 17:13 14483这两天玩了玩 XP 系统 通过vmware 装个 Mac. ... -
J2ME开发模拟器KEmulator简介及使用
2010-01-17 16:23 3822j2me开发中少不了每天跟 ... -
J2ME 使用的字体 Font 类
2009-12-23 10:01 1296在J2ME手机编程中使用字体 在J2ME手机编程中,可以 ... -
J2ME 发短信 实例
2009-12-21 20:17 1954package com.wanchong.duanxin; ... -
J2ME 文件下载实例 jar包为例
2009-12-13 14:56 3343package com.wanchong; /** * 作者 ... -
J2ME 文件操作
2009-12-13 12:04 1706package com.dw.contactadapter.b ... -
J2ME 图片下载实例 简洁明了
2009-12-13 11:43 1356package com.wanchong; /** * 作者 ... -
J2ME文件上传实例(FileConnector链接文件系统,非RMS)
2009-12-13 11:36 1392客户端: import java.io.InputStre ... -
汉诺塔程序的j2me实现(触摸屏)
2009-09-05 01:01 1404汉诺塔程序的j2me实现(触摸屏) import javax ... -
手机触摸屏程序开发
2009-08-09 17:32 1878使用J2ME技术实现手机触摸屏开发的方法: 首先的修改调试 ... -
Socket模拟Http协议
2009-05-20 14:55 1513接收数据方法: /**/ /// <summ ...
相关推荐
在J2ME开发中,JSR75是Java Community Process定义的一个标准,它为移动设备提供了文件系统和个人信息管理(PIM)的访问接口。本文主要聚焦于JSR75中的文件操作部分,总结了一些核心知识点。 首先,我们需要确定...
总的来说,JSR75 API为J2ME开发带来了强大的文件系统操作能力,使得开发者能够在移动设备上构建功能丰富的应用程序。通过熟练掌握这个API,开发者可以更好地满足用户对于数据存储和管理的需求,提升应用的用户体验。...
手册中相应图片、图表、文字的版权归原作者所有。你可以分发本手册的拷贝,但请保证其内容的完整性。www.j2medev.com对于使用本手册造成的任何损失,概不负责。 本手册0.7v 包含如下内容 J2ME Web Services ...
总之,这个J2ME文件操作程序是一个针对JSR 75规范的实现,它结合了文件系统访问和RMS功能,能够在移动设备上高效地删除文件。通过研究源代码,开发者可以学习如何在J2ME环境下执行文件操作,以及如何利用RMS进行数据...
通过阅读这份文档,开发者可以深入理解如何在J2ME应用中有效利用JSR-179进行位置服务开发。 总结来说,JSR-179 Location API为J2ME应用程序提供了强大的地理位置服务支持,通过其丰富的接口和功能,开发者可以构建...
J2ME Web Services RPC (JSR 172) J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D ...
总的来说,J2ME中的多文件上传是一个涉及网络通信、数据编码和流操作的复杂过程。理解multipart/form-data的工作原理和正确构建HTTP请求是关键。对于初学者来说,理解这个过程可能会有些困难,但一旦掌握,就能实现...
在Java J2ME中进行文件操作,主要涉及到以下几个核心知识点: 1. **文件系统访问**:J2ME的`javax.microedition.io.Connector`类提供了对设备文件系统的访问接口。开发者可以通过`new FileConnection("file://path/...
这个jar包是关于j2me中文件的操作的。
JSR 75(Personal Information Management API for Java Platform, Micro Edition)是J2ME中的一个规范,专门用于在移动设备上处理个人信息管理(PIM)数据,如联系人、日程和待办事项。这个API使得开发者能够方便地...
【标题】"fileconnection (jsr75)源代码"涉及的是Java ME平台中的JSR 75规范,即“Java API for Wireless Toolkit (J2ME) - PIM API”。这个规范定义了如何在移动设备上访问文件系统、个人信息管理(PIM)数据以及与...
J2ME Web Services RPC (JSR 172) J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D ...
J2ME Web Services RPC (JSR 172) J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D ...
JSR75(Java Specification Request 75)是针对J2ME平台的一组可选包,主要包含PIM API(个人信息管理应用程序接口)和FC API(文件连接应用程序接口),用于提供对移动设备上个人信息管理及文件系统访问的支持。...
本压缩包提供了两本关于J2ME入门学习的电子书籍:《J2ME基础学习教程》和《j2mejiaocheng》。以下是对这两本书籍中可能包含的知识点的详细说明: 1. **J2ME架构**: - KVM(K Virtual Machine):J2ME的虚拟机,...
为了在J2ME环境中安全高效地操作文件,开发者应遵循以下最佳实践: - 总是检查文件是否存在,避免对不存在的文件进行操作。 - 使用异常处理来捕获可能出现的IO异常,并提供有用的错误信息。 - 优化读写操作,尽可能...
"J2ME文件浏览器(MIDP版本)"是汪江松开发的一款针对J2ME平台的文件管理应用,它允许用户在移动设备上查看和操作本地文件系统。这一项目的核心功能包括浏览文件夹结构、查看文件信息、打开某些类型的文件(如文本...
在J2ME开发中,JSR系列API扮演着至关重要的角色,它们为开发者提供了丰富的功能和接口来实现特定的设备功能。 以下是一些关键的JSR及其对应API在J2ME开发中的重要性: 1. **JSR 118: Java ME CLDC (Connected ...
J2ME Web Services RPC (JSR 172) J2ME Web Services XML (JSR 172) Java APIs for Bluetooth (JSR 82) Location API (JSR 179) MID Profile 2.0 (JSR-118) Mobile Media API 1.1 (JSR-135) Mobile 3D ...