`

[转]J2ME程序操作文件系统

    博客分类:
  • Java
阅读更多
一、是否能够读写
想要自己编写的程序能够读写文件(注意这里所说的文件不是指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帮助文档 ,里面对每个方法都有一些介绍。

结束语
关于文件系统操作方面的内容就介绍到这里,还在学习当中。有重要发现,会及时补充。
0
1
分享到:
评论

相关推荐

    j2me程序读取文件

    该接口提供了一组方法用于打开、关闭、读取、写入文件等功能,并且支持多种文件系统。对于资源受限的设备而言,J2ME提供了一种轻量级的文件访问方式。 #### 三、读取文件的方法详解 本节将对提供的代码片段进行...

    j2me文件操作程序

    8. **src**:源代码目录,包含J2ME程序的Java源文件。 9. **verified**:可能用于存放验证过的MIDlet套件。 10. **res**:资源文件夹,可能包含了应用程序使用的图片、音频或其他非代码资源。 **源码分析** 在`src...

    J2ME程序设计实例

    在J2ME中,文件系统操作受限于设备的存储能力。Midp API提供了FileConnection接口,用于创建、读取、写入和删除文件。开发者需要理解如何处理目录结构,读写文件流,并考虑到移动设备上的内存限制。 5. **多媒体...

    jsr75 API J2ME手机程序文件系统

    总的来说,JSR75 API为J2ME开发带来了强大的文件系统操作能力,使得开发者能够在移动设备上构建功能丰富的应用程序。通过熟练掌握这个API,开发者可以更好地满足用户对于数据存储和管理的需求,提升应用的用户体验。...

    J2ME文件管理系统

    J2ME中的文件系统基于Java的`java.io`包,提供了一系列类和接口来处理文件操作。主要涉及以下几个关键类: - `File`: 表示文件或目录的抽象路径名。可以用来创建、删除、重命名文件或目录,以及获取文件属性。 - `...

    我的第一个J2ME程序(计算器)

    【标题】"我的第一个J2ME程序(计算器)" 涉及到的知识点主要围绕Java Micro Edition (J2ME) 开发,特别是如何利用J2ME来创建一个基础的计算器应用。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如早期...

    Java J2ME文件操作代码集.rar

    1. **文件系统访问**:J2ME的`javax.microedition.io.Connector`类提供了对设备文件系统的访问接口。开发者可以通过`new FileConnection("file://path/to/file")`创建一个`FileConnection`对象,然后调用其方法进行...

    J2ME程序设计实例教程实例源码

    **J2ME程序设计概述** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在资源有限的设备上运行的应用程序,如移动电话、智能家电、嵌入式系统等。J2ME提供了跨平台的可移植性,使得开发者能够编写...

    J2ME文件操作实例源代码

    J2ME的文件系统通常基于Connected Limited Device Configuration (CLDC) 和 Mobile Information Device Profile (MIDP),这两个标准定义了如何在小型设备上进行文件和数据存储。它们不支持Java SE中的File类,而是...

    j2me程序对手机本地磁盘文件的综合操作

    总的来说,J2ME程序对手机本地磁盘文件的综合操作涉及到文件的创建、读取、写入以及删除等基本操作,通过熟练运用FileConnection API,开发者可以在S60第5版这样的平台上实现丰富的功能。在实际开发中,理解不同设备...

    file_j2me.rar_j2me_j2me 文件_读写文件

    在Java Micro Edition (J2ME) 平台上,文件操作是移动设备应用程序开发中的常见任务。J2ME 提供了基本的文件系统访问能力,但与标准 Java SE 平台相比,其功能较为有限。本篇文章将深入探讨如何在 J2ME 中进行文件的...

    J2ME文件浏览器(MIDP版本)

    "J2ME文件浏览器(MIDP版本)"是汪江松开发的一款针对J2ME平台的文件管理应用,它允许用户在移动设备上查看和操作本地文件系统。这一项目的核心功能包括浏览文件夹结构、查看文件信息、打开某些类型的文件(如文本...

    J2ME文件系统开发实例

    在Java Micro Edition (J2ME) 平台上进行文件系统开发是一项重要的技能,尤其是在开发移动设备应用程序时。J2ME 文件系统开发实例通常涉及到如何在有限的资源和内存条件下,有效地进行文件的创建、读取、写入和管理...

    j2me 手机程序入门,让你快速掌握j2me手机程序开发

    不同设备可能有不同的屏幕尺寸、按键布局和操作系统版本。开发者需要使用预处理指令和条件语句来编写适应性强的代码。 10. **应用打包与部署** 完成开发后,需要将应用打包成JAR(Java Archive)和JAD(Java ...

    J2ME程序开发全方位基础讲解汇总

    **J2ME程序开发全方位基础讲解汇总** Java 2 Micro Edition (J2ME) 是Java平台的一个子集,主要用于嵌入式系统、移动设备和物联网(IoT)应用的开发,如手机、智能家电和车载信息系统等。本教程将全方位地讲解J2ME...

    获取J2ME平台手机系统属性

    在提供的文件`SystemProperty.jad`和`SystemProperty.jar`中,很可能是实现了一套获取J2ME手机系统属性的库或示例代码。这个库可能包含了获取上述各种系统属性的方法,通过解压并阅读源码,开发者可以学习如何在自己...

    j2me手机上的文件浏览器

    - `FileConnection` 接口扩展了 `Connection` 接口,提供了对文件系统的高级操作。 #### UI 控件使用 `MobileFileBrowser` 类使用了 `Display`, `List`, `Command` 等 UI 控件来实现用户界面: - `Display` 类提供...

    Jaxp_xml.rar_J2ME 程序_j2me_j2me xml_j2me 网络

    标题"Jaxp_xml.rar_J2ME程序_j2me_j2me_xml_j2me网络"表明这个压缩包包含了一个示例,演示如何使用JAXP(Java API for XML Processing)在J2ME环境中解析XML文件。JAXP是Java平台上的一个标准接口,用于处理XML文档...

    J2ME文件浏览器(LWUIT版)

    在J2ME中开发应用程序,开发者经常需要处理文件系统交互,而LWUIT( Lightweight UI Toolkit)则是一个轻量级的用户界面工具包,用于构建丰富的图形用户界面。本文将详细介绍基于LWUIT的J2ME文件浏览器的实现原理、...

    J2ME文件系统(从手机读取文件,递归存储器目录)

    在Java Micro Edition (J2ME) 平台上,文件系统管理是至关重要的,尤其是在开发针对移动设备的应用程序时。J2ME提供了FileConnection接口,它允许开发者读取、写入和管理设备上的文件和目录。本教程将深入探讨J2ME...

Global site tag (gtag.js) - Google Analytics