理论
-
[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,所以很容易把文件加到工程里面. 谢谢各位