Almacenar archivos en el sistema de archivos

Puede crear y administrar mediante programación los archivos y carpetas de los smartphones BlackBerry con la API FileConnection. La API FileConnection se introdujo con BlackBerry Device Software 4.2.

La API FileConnection se implementa en el paquete javax.microedition.io.file.

La API FileConnection se define a través de JSR 75 y está integrada en el Marco genérico de conexión. El componente principal de la API FileConnection es la clase javax.microedition.io.file.FileConnection. A diferencia de otras conexiones del Marco genérico de conexión, los objetos de FileConnection pueden devolverse correctamente desde el método javax.microedition.io.Connector.open() sin hacer referencia al archivo o la carpeta existentes. Este comportamiento permite la creación de nuevos archivos y carpetas en un sistema de archivos. Además de la documentación de RIM, hay numerosas fuentes de información acerca de JSR 75 y el Marco genérico de conexión.

Además, RIM proporciona extensiones para la API FileConnection. El paquete net.rim.device.api.io.file incluye la clase y las interfaces siguientes:

Puede acceder al sistema de archivos en el almacenamiento interno y en el almacenamiento de la tarjeta de memoria externa:

Almacenamiento interno

El almacenamiento interno proporciona almacenamiento de aplicaciones o almacenamiento multimedia integrado. Todos los smartphones BlackBerry disponen de almacenamiento interno. Para acceder al almacenamiento interno, utilice la ruta file:///store. Por ejemplo,

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

Almacenamiento externo

Puede acceder al almacenamiento de la tarjeta de memoria externa sólo en los smartphones con tarjetas microSD. Para acceder al almacenamiento de la tarjeta de memoria externa, utilice la ruta file:///SDCard. Por ejemplo,

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

Los archivos creados por su aplicación no se eliminan automáticamente cuando la aplicación se desinstala.

Los smartphones con almacenamiento multimedia integrado tienen una partición de sistema de archivos denominada Sistema. Puede acceder a esta partición con la ruta file:///system. En BlackBerry Device Software 5.0 y posterior, la partición de sistema se reserva para el uso del sistema y es de sólo lectura. En versiones de BlackBerry Device Software anteriores a la 5.0, la partición de sistema es de lectura/escritura.

Ejemplo de código: crear una carpeta

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

Ejemplo de código: crear un archivo

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

Ejemplo de código: escribir texto en un archivo

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

Ejemplo de código: leer secciones de un archivo binario

Este ejemplo de código muestra cómo leer secciones de un archivo binario mediante la lectura de la información del encabezado desde un archivo .gif. La aplicación lee el ancho y la altura de la imagen a partir del encabezado. Para ejecutar el ejemplo de código, ubique un archivo .gif en la carpeta raíz de una tarjeta de memoria en 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();
      } 
	} 
}

Ejemplo de código: mostrar la ruta de acceso a la carpeta de vídeo a través 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);
    }
}

Ejemplo de código: recuperar una lista de raíces montadas

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

¿Le ha resultado útil esta información? Envíenos sus comentarios.