为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

J2ME访问手机文件

2012-05-27 6页 pdf 268KB 24阅读

用户头像

is_645772

暂无简介

举报
J2ME访问手机文件 想要自己编写的程序能够读写文件(注意这里所说的文件不是指 jar包中的文件,是指比如 手机内存或卡中的文件), 首先要确认程序将要安装的手机是否支持 JSR75 ;其次还要知道该手机是否允许未签 名的程序访问内部文件系统。如果 其中有一个条件不能满足,那么程序就无法实现出文件的读写功能了。 在对文件系统的操作方面,J2ME提供的功能是很有限的,之所以有这么多的限制,是为了 安全着想。J2ME在设计之初 就是为了安全方便的实现有限功能而设计的。所以即便有很多的限制,它的易用性,是很多 人倾心于使用它。 ...
J2ME访问手机文件
想要自己编写的程序能够读写文件(注意这里所说的文件不是指 jar包中的文件,是指比如 手机内存或卡中的文件), 首先要确认程序将要安装的手机是否支持 JSR75 ;其次还要知道该手机是否允许未签 名的程序访问内部文件系统。如果 其中有一个条件不能满足,那么程序就无法实现出文件的读写功能了。 在对文件系统的操作方面,J2ME提供的功能是很有限的,之所以有这么多的限制,是为了 安全着想。J2ME在之初 就是为了安全方便的实现有限功能而设计的。所以即便有很多的限制,它的易用性,是很多 人倾心于使用它。 前面说到了一个软件¡签名¡的问题,其实是一个¡授权¡的问题。即:在手机中运行的程序是 有很多的限制的,如是 否有访问网络的权限,是否能够访问文件系统等。如果某软件得到了手机开发商/运营商的 签名授权,则可以得到很多权限。 授权的证书有 3个域,不同的域有不同的权限。但是有些手机是可以自己设置软件的权限的, 比如我的索爱手机就可以设置有 关访问网络及文件系统的权限。 二、JSR75 介绍 关于 JSR75 方面的详细,你可以去看看 SonyEricsson/Nokia/MOTO 提供的开发 包中的帮助文档,这些帮助文档中 都有介绍这个包。 JSR75 是为了实现对文件系统的操作功能,另外设计的,是一个扩展包。 在 MIDP API 中是没有关于文件读写方面的方法 的。所以在安装程序之前要确认手机是否支持该包。 来看看 JSR75中有那些内容: (1)FC API javax.microedition.io.file ¡¡ 提供对本地文件系统的访问功能 ConnectionClosedException ¡¡ 当 试 图 对 一 个 已 经 关 闭 的 FileConnection 对象进行操作时,会抛出此异常。 FileConnection ¡¡ 这是一个很关键的类,基本上文件读写都是有该类完成。 可以从字面上去理解它的意思。 FileSystemEventHandler ¡¡ 这个类我也没用过,不知道它具体的功能。 FileSystemListener ¡¡ 用于监听文件系统目录状态的变化,比如文件的删除、 新增,存储卡的拔出和插入等。 FileSystemRegistry ¡¡ 用于管理和跟踪文件系统的监听器,以及可以通过此 类过去当前所有文件系统的根目录。 IllegalModeException ¡¡ 文件打开模式异常,当试图写入以只读方式打开的 文件时,会抛出该异常。 (2)PIM API javax.microedition.io.pim ¡¡ 提供对个人信息数据的访问,一般包括名片夹、日历项和 待办事项。 此包这次暂不介绍,自己还没有用过。 三、根据程序详细介绍有关文件系统的操作 1)验证手机系统是否支持 FC API 我们可以通过系统属性来验证手机是否支持 FC API: public void canfileControl() { /** * 判断系统是否支持 FC */ String version = System.getProperty( "microedition.io.file.FileConnection.version "); if (version == null) { System.out.println( "cannot control fileSystem! "); return; } else { System.out.println( "version: " + version); } /** * 获取文件系统的所有根目录 * 索爱的机型,所有的根目录是: * e:/ * c:/ * root1/ */ Enumeration emun = FileSystemRegistry.listRoots(); String tmp = " "; while (emun.hasMoreElements()) { tmp = emun.nextElement().toString(); System.out.println( "root: " + tmp); } } 这方法也是在网上看到的,我试过。但是对于 Nokia的机型好像不行,即使 Nokia支持该 类,返回的仍然是 null值。我认为可能 是 key不同。请高人指导。 2)实现 ¡文件夹创建/文件创建/文件写入/文件读取¡功能 注意,当我们要进入文件系统,对它进行操作时,系统会中断操作,询问用户是否要对文件 系统进行操作。所以我们必须使用一个 线程,来进行文件系统的操作。 import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import javax.microedition.io.Connector; import javax.microedition.io.file.FileConnection; import javax.microedition.io.file.FileSystemRegistry; import javax.microedition.lcdui.ChoiceGroup; import javax.microedition.lcdui.List; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; public class FileControl extends Thread implements Runnable { public void control1() { FileConnection fc = null; Enumeration enums = null; String str = " "; List list; try { /** * 打开一个 文件/文件夹 ,可以以三种方式打开:READ、READ_WRITE、 WRITE。 * 如果没有指定第二个参数,则默认为 READ_WRITE方式。 * 注意文件夹的路径写法,路径最后有¡/¡,则表示打开的是文件夹。 * 文件路径的写法有很多种,这里的路径写法适合与索爱的机型。 * 比如: MOTO:file:///e/other/notes */ fc = (FileConnection) Connector.open( "file://localhost/e:/other/notes/ ", Connector.READ); /** * 注意,上面的方法在文件不存在的情况下,仍能执行成功,所以我们要用下面的 方法 * 判断文件是否存在,此函数要求文件是可读的, * 即文件打开方式不能是以 Connector.WRITE 方式打开的 * 否则会抛出 IllegalModeException 异常 */ if (!fc.exists()) { /** * 如果不存在,就创建一个文件夹。 * 注意此函数要求文件的打开方式是可写的, * 即用上面的可读方式,在执行到这里会抛出 IllegalModeException 异常 * 所以我们应该改成 Connector.READ_WRITE 方式 * 也可以用下面的方法:fc.setWritable(true) * 但要注意的是,这时文件就不可读了,也就是说你再使用 fc.exists(),会抛出异 常 * 所以最好的方法是在打开时就设置为 Connector.READ_WRITE 方式 * 还要注意的是,此方法只能创建一层目录,即,如果 other 文件夹也不存在, 则创建会失败 * 抛出 IO异常。所以该方法执行成功的情况是在 other文件夹存在的情况下 */ fc.setWritable(true); fc.mkdir(); } else { /** * 下面的方法是判断打开的文件是否为文件夹 */ boolean isfolder = fc.isDirectory(); if(!isfolder){ return; } list = new List( "list ", ChoiceGroup.IMPLICIT); /** * 获取目录下所有文件, * 注意此方法返回的是所有文件的名字。 * 要求文件的打开方式是可读 */ enums = fc.list(); while (enums.hasMoreElements()) { str = enums.nextElement().toString(); list.append(str, null); } } fc.close(); } catch (Exception e) { System.out.println( "get file error!!!!!! "); } } public void control2() { FileConnection fc = null; TextBox tb; /** * 打开文件 */ try{ fc = (FileConnection) Connector.open( "file://localhost/e:/other/notes/1.txt ", Connector.READ_WRITE); if(!fc.exists()){ /** * 如果文件不存在,创建文件 * 此方法要求文件的打开方式为可写 */ fc.create(); /** * 打开输出流,用于向文件输出内容 * 要求文件打开方式为可写 */ OutputStream out = fc.openOutputStream(); byte[] b = "contents ".getBytes( "UTF-8 "); out.write(b); out.flush(); out.close(); }else{ /** * 打开输入流,读取文件中的内容 * 要求文件打开方式为可读 */ InputStream dis = fc.openInputStream(); /** * 获取文件大小 */ int size = (int)fc.fileSize(); byte[] bytes = new byte[size]; dis.read(bytes, 0, bytes.length); String str = new String(bytes, "UTF-8 "); tb = new TextBox( " ", str, 200, TextField.ANY); dis.close(); } fc.close(); }catch(Exception e){ System.out.println( "get file error!!!!!! "); } } } 3)其他方法介绍 除了上面讲的一些方法的用法外,FileConnection 还有其他很多有用的方法。这里就不介 绍了。你可以下载 J2ME帮助文档 , 里面对每个方法都有一些介绍。
/
本文档为【J2ME访问手机文件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索