在 J2me 中读写数据

Posted

技术标签:

【中文标题】在 J2me 中读写数据【英文标题】:Read write data in J2me 【发布时间】:2011-12-30 07:56:45 【问题描述】:

我正在编写一个将用户数据存储到文件中的应用程序。但是,当我尝试打开手机内存时,我的应用程序会引发安全异常,并且不允许我写入或读取数据。 这是我的代码。

 try
      
              FileConnection fc = (FileConnection)Connector.open("file:///C:/myfile.dat",Connector.READ_WRITE);
              // If no exception is thrown, the URI is valid but the folder may not exist.
             if (!fc.exists())
             
                 fc.create();  // create the folder if it doesn't exist
             
      OutputStream   os=fc.openOutputStream();
      String s="hello how r u..";
      byte[] b=s.getBytes();

      os.write(b);
      os.flush();
             fc.close();
      
      catch(Exception error )
       

         Alert alert = new Alert(error.getMessage(), error.toString(), null, null);
         alert.setTimeout(Alert.FOREVER);
         alert.setType(AlertType.ERROR);
         display.setCurrent(alert);

       

但是我使用 SDycard 来保存数据并且效果很好。但是,当我尝试访问手机内存时,是否有任何解决方案可以从 SecurityException 中逃脱?当我每次将数据存储在 SDCARD 中时,都会提示一条消息,要求用户允许应用程序读取或写入数据。我也不想要这个提示信息。 如何摆脱这种情况?

【问题讨论】:

【参考方案1】:

您必须签署并认证您的 J2ME 应用程序。这将涉及购买证书。我没有这样做,所以你必须确认这一点或等待 SO 中的另一个答案。但我很确定,除非您在 midlet 上签名,否则手机的安全策略会阻止这种情况发生。

一个关于如何签署您的 midlet 的 URL:

http://m-shaheen.blogspot.com/2009/07/1.html

【讨论】:

您的链接指向仅适用于模拟器而不适用于设备的自签名认证,请查看我的答案以获得深入的问题解决方案。【参考方案2】:

同意@Sethu 的观点,即 OP 是由于 midlet 签名。

OP 分为逻辑阶段来解决问题:

    问题/原因: 每当受限制的 API(在本例中为 JSR 75 api)被 midlet 访问时,它需要权限来验证其真实性,这有助于阻止恶意代码。在您的情况下,midlet 未签名(在 #2 如何签名中说明),因此它没有必要的权限,因此应用程序管理系统会提示用户同意您的 midlet 进行的每个此类敏感操作。阅读this link了解更多详情。

    分辨率 它是一个多步骤过程,(a) 获取证书,参考 this link,(b) 在 JAD 文件中的 MIDlet-Permissions 下添加必要的权限(读取:javax.microedition.io.Connector.file.read,写入:javax.microedition.io.Connector.file.write

    证书采购 这个链接Java ME signing for dummies

    给出了详细的解释

【讨论】:

以上是关于在 J2me 中读写数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用j2me将数据保存在手机中?

在 J2ME 中存储数据的文件

J2ME 中的数据库

在 J2ME 中拆分文本

J2ME,InputStream 在通过蓝牙接收 40K 数据后挂断

从 j2me 应用程序向服务器发送 XML 数据