5

マイクロSDカードにいくつかのファイルを保存しようとしています。SDカードの空き状況を確認するために、次の方法を使用しています。

private boolean isSdCardReady() {
    Enumeration e = FileSystemRegistry.listRoots();

    while (e.hasMoreElements()) {
        if (e.nextElement().toString().equalsIgnoreCase("sdcard/")) {    
            return true;
        }
    }
    return false;
}

このメソッドがtrueを返しても、ファイルを保存しようとすると、例外が発生しますnet.rim.device.api.io.file.FileIOException: File system is not ready

これはどういう意味ですか?SDカードが利用できない場合、なぜそれがリストされているのFileSystemRegistry.listRoots()ですか?

SDカードが書き込み可能であることを確認するにはどうすればよいですか?

私の開発環境:

  • BlackBerryJDEEclipseプラグイン1.5.0
  • BlackBerry OS 4.5
  • 3Gカードを搭載したBlackBerryBold
4

2 に答える 2

4
  1. 通常、デバイスの再起動時にSDカードにアクセスしようとすると、このエラーが発生しました。起動が完了するまで、アプリのすべての操作を延期する必要があります。

    while (ApplicationManager.getApplicationManager().inStartup()) {
        try {
            Thread.sleep(500);
        } catch (InterruptedException ignored) {
        }
    }
    
  2. ここで述べたもう1つの考えられる原因を覚えています。使用後は、すべてのストリームを閉じる必要があります。

于 2012-07-04T08:39:00.690 に答える
3

問題を解決しました。rootsEnum.nextElement().toString();「SDCard」を返しながら「sdcard」を探していました。ええ、大文字と小文字が区別されます。ここで、ハードコードされた「SDCard」を使用する代わりに、上記の方法を次のように変更しました。

private static String getSdCardRootDir() {
    Enumeration rootsEnum = FileSystemRegistry.listRoots();

    while (rootsEnum.hasMoreElements()) {

        String rootDir = rootsEnum.nextElement().toString();

        if (rootDir.equalsIgnoreCase("sdcard/")) {
            return "file:///" + rootDir;
        }
    }

    return null;
}

これを使用して、システム定義の場合のルートディレクトリを取得しました。

于 2012-07-16T09:42:49.743 に答える