Search code examples
blackberryfilesystemsblackberry-eclipse-plugin

Cannot Write On Micro SDCard On BlackBerry


I am trying to save some files on micro SDCard. To check the availability of SDCard, I am using the following method;

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

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

Even if this method returns true, when I try to save files, it gives exception net.rim.device.api.io.file.FileIOException: File system is not ready.

What does this means? If SDCard is not available, then why its listed in FileSystemRegistry.listRoots()?

How can I make sure that SDCard is available for writing?

My development environment:

  • BlackBerry JDE Eclipse Plugin 1.5.0
  • BlackBerry OS 4.5
  • BlackBerry Bold with a 3G card

Solution

  • Solved the problem. I was looking for "sdcard" while rootsEnum.nextElement().toString(); returns "SDCard". Yeah, its case sensitive. Now, instead of using hard-coded "SDCard", I've changed the above method to the following;

    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;
    }
    

    Using this, I got the root directory in its system defined case.