Speichern von Dateien im Dateisystem

Sie können die Dateien und Ordner auf BlackBerry-Smartphones mit der Dateiverbindungs-API programmgesteuert erstellen und verwalten. Die Dateiverbindungs-API wurde mit BlackBerry Device Software  4.2. eingeführt.

Die Dateiverbindungs-API ist in das javax.microedition.io.file-Paket implementiert.

Die Dateiverbindungs-API wird von JSR 75 definiert und basiert auf dem Generic Connection Framework. Die Hauptkomponente der Dateiverbindungs-API ist die javax.microedition.io.file.FileConnection-Klasse. Im Unterschied zu anderen Generic Connection Framework-Verbindungen können FileConnection-Objekte erfolgreich von der javax.microedition.io.Connector.open()-Methode zurückgegeben werden, ohne auf eine vorhandene Datei oder einen vorhandenen Ordner zu verweisen. Dadurch wird die Erstellung von neuen Dateien und Ordnern auf einem Dateisystem ermöglicht. Zusätzlich zur RIM-Dokumentation gibt es viele Informationsquellen zu JSR 75 und Generic Connection Framework.

Außerdem stellt RIM Erweiterungen für die Dateiverbindungs-API bereit. Das net.rim.device.api.io.file-Paket enthält die folgende Klasse und die folgenden Schnittstellen:

Sie können auf das Dateisystem über den internen Speicher und den externen Medienkartenspeicher zugreifen:

Interner Speicher

Beim internen Speicher handelt es sich um den Anwendungsspeicher oder den integrierten Medienspeicher. Alle BlackBerry-Smartphones verfügen über internen Speicher. Um auf diesen internen Speicher zuzugreifen, verwenden Sie den Pfad file:///store. Beispiel:

FileConnection fc = (FileConnection)Connector.open("file:///Store")

Externer Speicher

Sie können auf den externen Medienkartenspeicher nur auf Smartphones mit MicroSD-Karten zugreifen. Um auf den externen Medienkartenspeicher zuzugreifen, verwenden Sie den Pfad file:///SDCard. Beispiel:

FileConnection fc = (FileConnection)Connector.open("file:///SDCard")

Dateien, die von Ihrer Anwendung erstellt werden, werden nicht automatisch gelöscht, wenn die Anwendung deinstalliert wird.

Smartphones, die über einen integrierten Medienspeicher verfügen, haben eine Dateisystempartition mit dem Namen "System". Sie können auf diese Partition mit dem Pfad file:///system zugreifen. In BlackBerry Device Software 5.0 und höher ist die Systempartition für die Systemverwendung reserviert und ist schreibgeschützt. In BlackBerry Device Software Versionen vor Version 5.0 verfügt die Systempartition über Lese-/Schreibzugriff.

Codebeispiel: Erstellen eines Ordners

import net.rim.device.api.system.Application;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import java.io.IOException;
public class CreateFolderApp extends Application 
{
    public static void main(String[] args) 
    {
        CreateFolderApp app = new CreateFolderApp();
        app.setAcceptEvents(false);
        try 
        {    // the final slash in the folder path is required
             FileConnection fc = (FileConnection)Connector.open("file:///SDCard/testfolder/");
             // If no exception is thrown, the URI is valid but the folder may not exist.
             if (!fc.exists())
             {
                 fc.mkdir();  // create the folder if it doesn't exist
             }
             fc.close();
         }
         catch (IOException ioe) 
         {
            System.out.println(ioe.getMessage() );
         }
    }
}

Codebeispiel: Erstellen einer Datei

import javax.microedition.io.*;
import java.io.IOException;
import javax.microedition.io.file.*;
import net.rim.device.api.system.Application.*;
public class CreateFileApp extends Application 
{
   public static void main(String[] args) 
   {
      CreateFileApp app = new CreateFileApp();
      app.setAcceptEvents(false);
      try 
      {
          FileConnection fc = 
               (FileConnection)Connector.open("file:///store/home/user/newfile.txt");
          // If no exception is thrown, the URI is valid but the file might not exist.
          if (!fc.exists())
          {
              fc.create();  // create the file if it doesn't exist
          }
          fc.close();
       }
       catch (IOException ioe) 
       {
          System.out.println(ioe.getMessage() );
       }
  }
}

Codebeispiel: Schreiben von Text in eine Datei

import net.rim.device.api.system.Application;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import java.io.IOException;
import java.io.OutputStream;
public class AddFileContent extends Application 
{
  public static void main(String[] args) 
  {
    AddFileContent app = new AddFileContent();
    app.setAcceptEvents(false);
    try 
    {
      FileConnection fc = (FileConnection)Connector.open("file:///store/home/user/newfile.txt");
      // If no exception is thrown, then the URI is valid, but the file may or may not exist.
      if (!fc.exists())
      {
          fc.create();  // create the file if it doesn't exist
      }
      OutputStream outStream = fc.openOutputStream(); 
      outStream.write("test content".getBytes());
      outStream.close();
      fc.close();
     }
     catch (IOException ioe) 
     {
        System.out.println(ioe.getMessage() );
     }
  }
}

Codebeispiel: Lesen der Abschnitte einer Binärdatei

Dieses Codebeispiel zeigt auf, wie man Abschnitte einer Binärdatei durch Lesen von Informationen in Kopfzeilen einer GIF-Datei liest. Die Anwendung liest die Breite und die Höhe des Bildes von der Kopfzeile. Um das Codebeispiel auszuführen, platzieren Sie eine GIF-Datei im Stammordner einer Medienkarte in einem BlackBerry-Smartphone.

import net.rim.device.api.ui.*;
import net.rim.device.api.io.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
public class RandomFileAccess extends UiApplication
{
   public static void main(String[] args)
   {
      RandomFileAccess app = new RandomFileAccess();
      app.enterEventDispatcher();
   }
   public RandomFileAccess()
   {
      pushScreen(new HomeScreen());
   }
}
class HomeScreen extends MainScreen
{
   public HomeScreen()
   {
      setTitle("Random File Access Sample");
      try 
      {
         FileConnection fc = (FileConnection)Connector.open("file:///SDCard/test.gif");
         boolean bFileExists = fc.exists();
         if (!bFileExists)
         {
         Dialog.alert("Cannot find specified GIF file.");
         System.exit(0);
         }
         DataInputStream in = fc.openDataInputStream();
         byte[] widthBytes = new byte[2];
         byte[] heightBytes = new byte[2];
         if ( in instanceof Seekable ) 
         {
            ((Seekable) in).setPosition(6);
            in.read(widthBytes,0,2);
            ((Seekable) in).setPosition(8);
            in.read(heightBytes,0,2);
         } 
         int widthPixels  = widthBytes[0]  + 256 * widthBytes[1];
         int heightPixels = heightBytes[0] + 256 * heightBytes[1];
         add(new LabelField("Width: " + widthPixels + "\nHeight: " + heightPixels));
         in.close();
         fc.close();
      }
      catch (IOException ioe) 
      {
         ioe.printStackTrace();
      } 
	} 
}

Codebeispiel: Anzeigen des Pfads zum Videoordner mit "System.getProperty()"

import net.rim.device.api.ui.component.LabelField.*;
import net.rim.device.api.ui.container.MainScreen.*;
import net.rim.device.api.ui.UiApplication.*;
public class GetVidDir extends UiApplication
{
    public static void main(String args[])
    {
        GetVidDir app = new GetVidDir();
        app.enterEventDispatcher();
    }
    public GetVidDir()
    {
        HomeScreen hs = new HomeScreen();
        pushScreen(hs);
    }
}
class HomeScreen extends MainScreen
{
    public HomeScreen()
    {
        LabelField msg = new LabelField(System.getProperty("fileconn.dir.videos"));
        add(msg);
    }
}

Codebeispiel: Abrufen einer Liste von eingebundenen Stammdateien

import java.util.Enumeration.*;
import javax.microedition.io.file.FileSystemRegistry,*;
import net.rim.device.api.ui.component.LabelField.*;
import net.rim.device.api.ui.container.MainScreen.*;
import net.rim.device.api.ui.UiApplication.*;
public class ListMountedRoots extends UiApplication 
{
   public static void main(String[] args) 
   {
      ListMountedRoots app = new ListMountedRoots();
      app.enterEventDispatcher();
   }
   public ListMountedRoots()
   {
      pushScreen(new HomeScreen());
   }
}
class HomeScreen extends MainScreen
{
    public HomeScreen() {
        StringBuffer msg = new StringBuffer( “The mounted roots are:\n”);
        Enumeration e = FileSystemRegistry.listRoots();
        while (e.hasMoreElements()) {
            msg.append( e.nextElement() );
            msg.append( ‘\n’ );
        }
        add(new LabelField(msg));
    }
}

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.