J2ME中的文件读写问题

理论

[file:///] 或者 [file://localhost/] 表示模拟器的根目录地址 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,所以很容易把文件加到工程里面. 谢谢各位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值