【问题标题】:File path for J2ME FileConnection?J2ME FileConnection 的文件路径?
【发布时间】:2010-03-22 10:32:49
【问题描述】:

我正在编写一个需要写入文件的 MIDlet。我正在使用 JSR-75 中的 FileConnection 来完成此操作。

目的是让这个 MIDlet 在尽可能多的设备上运行(理想情况下是所有支持 JSR-75 的 MIDP 2.0 设备)。

在几个模拟器和一个 HTC Touch Pro2 上,我可以完美地使用以下代码来获取文件系统的根目录:

Enumeration drives = FileSystemRegistry.listRoots();
String root = (String) drives.nextElement();
String path = "file:///" + root;

但是,在诺基亚 S60 第 5 版仿真器上,尝试打开到此路径的 FileConnection 会引发 java.lang.SecurityException。显然 S60 设备不允许连接到文件系统的根目录。我意识到我可以使用 System.getProperty("fileconn.dir.photos") 之类的东西,但并非所有设备都支持。

那么,我的实际问题:获得用于创建 FileConnection 的路径的最佳方法是什么,以实现最大的可移植性?

谢谢。

编辑: 我想我可以遍历枚举中的所有根,并检查一个可写的根,但这并不是最优的,原因有两个。首先,不一定有任何可写的根。其次,这可能是手机内存,也可能是存储卡,所以存储方式不会在设备间保持一致,相当丑陋。

【问题讨论】:

    标签: file-io java-me midp jsr75


    【解决方案1】:

    您应该打开到根目录的只读连接,以便找出它们包含的文件夹。

    作为一般规则,当打开到文件夹的 read_write 连接会引发 SecurityException 时,请尝试打开只读连接以浏览子文件夹以找到可写的。

    特别是在 Symbian(以及其他足以为您的 MIDlet 提供安全数据笼的平台)上,您可以使用 System.getProperty("fileconn.dir.private"); 来查找可写区域。

    【讨论】:

    • 是的,我发现了 fileconn.dir.private。但是,如果找不到它,我仍然会尝试所有的根源。而且我不需要以 R/W 连接吗?如果我以只读方式连接,我无法确定根是否可写...
    • 根可能不可写,但其子文件夹之一可能是。
    【解决方案2】:

    我会告诉你我们做什么。我们有一个测试应用程序,它只找出文件系统根目录和 SD 卡根目录(如果适用)。我们将此设置为 jad 参数。代码从 Jad 文件中读取它。由于您不需要为不同的设备重新编译 jar,因此效果很好,只需更改具有不同文件系统根的手机的 jad 参数即可。

    【讨论】:

    • 这样更简洁,但在我们的例子中并不可行。我们的应用程序需要在几乎所有支持 JSR-75 的设备上运行。我们无法检查哪个设备允许对哪个 root 进行写访问...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多