在J2me中读取写入数据

时间:2011-12-30 07:56:46

标签: java security java-me midp

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

 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中。我也不想要这个提示信息 如何逃避这种情况?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

同意@Sethu OP是由于midlet签名。

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

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

  2. 解决 它是一个多步骤的过程,(a)获取证书,参考this link,(b)在{{1}下添加必要的权限(读取:javax.microedition.io.Connector.file.read,写入:javax.microedition.io.Connector.file.write)在JAD文件中

  3. 采购证书 此链接Java ME signing for dummies

  4. 中给出了详细解释