Armazenamento de arquivos no sistema de arquivos

Você pode, automaticamente, criar e gerenciar os arquivos e as pastas em smartphones BlackBerry com a API FileConnection. A API FileConnection foi introduzida com o BlackBerry Device Software 4.2.

A API FileConnection está implementada no pacote javax.microedition.io.file.

A API FileConnection é definida pelo JSR 75 e é incorporada à Estrutura genérica de conexão. O componente principal da API FileConnection é a classe javax.microedition.io.file.FileConnection. Diferentemente de outras conexões de Estrutura genérica de conexão, os objetos FileConnection podem, com êxito, ser retornados do método javax.microedition.io.Connector.open() sem se referir a um arquivo ou uma pasta existente. Este comportamento permite a criação de novos arquivos e pastas em um sistema de arquivos. Além da documentação da RIM, há muitas fontes de informações sobre JSR 75 e a Estrutura genérica de conexão.

Além disso, a RIM fornece extensões à API FileConnection. O pacote net.rim.device.api.io.file inclui as seguintes classes e interfaces:

Você pode acessar o sistema de arquivos no armazenamento interno e no armazenamento externo por cartão de memória:

Armazenamento interno

Armazenamento interno é o armazenamento de aplicativo ou o armazenamento incorporado de mídia. Todos os smartphones BlackBerry têm armazenamento interno. Para acessar o armazenamento interno, use o caminho file:///store. Por exemplo:

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

Armazenamento externo

Você pode acessar o armazenamento externo por cartão de memória apenas em smartphones com cartões microSD. Para acessar armazenamento externo por cartão de memória, use o caminho file:///SDCard. Por exemplo:

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

Arquivos criados por seu aplicativo não são excluídos automaticamente quando o aplicativo é desinstalado.

Os smartphones que têm armazenamento incorporado de mídia têm uma partição de sistema de arquivos chamada Sistema. Você pode acessar esta partição com o caminho file:///system. No BlackBerry Device Software 5.0 e posterior, a partição do sistema é somente leitura e está reservada para o uso do sistema. Em versões anteriores ao BlackBerry Device Software 5.0, a partição do sistema é de leitura/gravação.

Exemplo de código: Criação de pastas

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

Exemplo de código: Criação de arquivos

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

Exemplo de código: Gravação de texto em arquivos

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

Exemplo de código: Leitura de seções de arquivos binários

Este exemplo de código demonstra como ler seções de um arquivo binário lendo informações de cabeçalho de um arquivo .gif. O aplicativo lê a largura e a altura da imagem no cabeçalho. Para executar o exemplo de código, coloque um arquivo .gif na pasta raiz de um cartão de memória em um 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();
      } 
	} 
}

Exemplo de código: Como usar o System.getProperty() para exibir o caminho à pasta de vídeo

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

Exemplo de código: Recuperação de listas de raízes 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));
    }
}

Estas informações foram úteis? Gostaríamos de receber seus comentários.