现在的位置: 首页 > 综合 > 正文

J2ME中的文件读写问题

2013年10月25日 ⁄ 综合 ⁄ 共 1673字 ⁄ 字号 评论关闭

理论

或者 表示模拟器的根目录地址
WTK2.5.1根目录为C:/Documents and Settings/Administrator/j2mewtk/2.5.2/appdb/DefaultColorPhone/filesystem

问题

if( System.getProperty("microedition.io.file.FileConnection.version" ) == null ){

return;
}

try {
FileConnection fc = (FileConnection)Connector.open("file:///C:/CCC.txt", Connector.READ);
fc.creat();
}catch (java.lang.SecurityException e) {
System.out.println("fc failed!");
e.printStackTrace();
}

首先这段代码会抛出SecurityException 异常,就在Connector.Open()的时候,
那位达人能告诉我为什么么? 难道不能用FileConnection了吗?

另外还有问题是,在模拟器下运行时候, 这个"file:///C:/CCC.txt"的在哪儿里啊 ? 也就是说如果fc.create成功的话,这个ccc.txt应该在哪儿个路径下呢?


java.lang.SecurityException: Application not authorized to access the restricted API


没有权限读这个文件


你把Connetor.READ 改成 Connector.READ_WRITE


抛出SecurityException 异常, 说明你没有权限调用这个函数
基于设备安全考虑,一些函数必须经过签名才可以使用
这个在jsr118里头有提到


java.lang.SecurityException: Application not authorized to access the restricted API 异常.

我现在是在NOKIA的模拟器下使用的啊,

那如果要使用FileConnection , 需要如何 "签名" 才能使用呢?


签名需要购买


要在模拟器中读取文件,可临时将文件打包在jar文件中,然后用getResourceAsStream读取,如:

InputStreamReader reader = new InputStreamReader(this.getClass().getResourceAsStream("cced.dat"));

简要说明:
1、
须将要读取的文件(如上cced.dat)包含在project中,编译器会将其压缩打包进jar文件。在NetBeans
5.0中,我没找到直接包含文件的方法,只好先在project中新建一个空白文件cced.dat,然后将实际的cced.dat文件复盖这个空白文件

2、你可以在程序任何地方使用this.getClass().getResourceAsStream(filename),它会在project中找filename这个文件,你可能需要调试一下路径才能正确找到

3、缺点是,调用getResourceAsStream时它会将整个文件读入内存,因此文件不能太大


仔细的看了下FileConnection API 的介绍
(http://www.sf.org.cn/Article/symbiandev/200510/396.html)


(不解)

这里面有访问权限问题
对于模拟器,也应该是手机平台,我们加安全管理器(SecurityManager)是为了限制手机之外的代码访问手机资源,而不是限制自己访问。对手机上
自己的代码,只有使用bootclasspath加载就可以了,JVM会认为是系统代码,而授予AllPermission。


使用this.getClass().getResourceAsStream("conf.txt")的方法, 我用的Eclipse,所以很容易把文件加到工程里面. 谢谢各位

抱歉!评论已关闭.