Stockage de fichiers dans le système de fichiers

Vous pouvez créer et gérer par programmation les fichiers et les dossiers se trouvant sur les smartphones BlackBerry avec l'API FileConnection. L'API FileConnection a été introduite avec BlackBerry Device Software 4.2.

L'API FileConnection est déployée dans le progiciel javax.microedition.io.file.

L'API FileConnection est définie par JSR 75 et repose sur le GCF (Generic Connection Framework). Le composant principal de l'API FileConnection est la classe javax.microedition.io.file.FileConnection. Contrairement aux autres connexions GCF, les objets FileConnection peuvent être correctement renvoyés depuis la méthode javax.microedition.io.Connector.open() sans référencer de fichier ou de dossier existant. Ce comportement permet la création de fichiers et dossiers sur un système de fichiers. En plus de la documentation RIM, il existe de nombreuses sources d'informations à propos de JSR 75 et du GCF.

Par ailleurs, RIM fournit des extensions à l'API FileConnection. Le package net.rim.device.api.io.file inclut la classe et les interfaces suivantes :

Vous pouvez accéder au système de fichiers sur le stockage interne et sur le stockage par carte multimédia externe :

Stockage interne

Le stockage interne est le stockage d'application ou le stockage multimédia intégré. Tous les smartphones BlackBerry disposent d'un stockage interne. Pour accéder au stockage interne, utilisez le chemin file:///store. Par exemple,

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

Stockage externe

Vous pouvez accéder au stockage par carte multimédia externe uniquement sur les smartphones équipés d'une carte microSD. Pour accéder au stockage par carte multimédia externe, utilisez le chemin file:///SDCard. Par exemple,

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

Les fichiers créés par votre application ne sont pas automatiquement supprimés lorsque votre application est désinstallée.

Les smartphones disposant d'un espace de stockage multimédia intégré présentent une partition du système de fichiers appelée System. Vous pouvez accéder à cette partition via le chemin file:///system. Dans BlackBerry Device Software 5.0 et versions ultérieures, la partition système est en lecture seule et elle est réservée à l'utilisation système. Dans les versions de BlackBerry Device Software antérieures à la version 5.0, la partition système est ouverte en lecture/écriture.

Échantillon de code : création d'un dossier

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

Échantillon de code : création d'un fichier

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

Échantillon de code : écriture de texte dans un fichier

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

Échantillon de code : lecture de sections d'un fichier binaire

Cet échantillon de code montre comment lire des sections d'un fichier binaire en lisant les informations d'en-tête d'un fichier .gif. L'application lit la largeur et la hauteur de l'image à partir de l'en-tête. Pour exécuter l'échantillon de code, vous devez placer un fichier .gif dans le dossier racine d'une carte multimédia sur un smartphone BlackBerry.

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

Échantillon de code : affichage du chemin du dossier Vidéo à l'aide de 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);
    }
}

Échantillon de code : récupération d'une liste d'emplacements racine montés

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

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.