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:
- FileSystemJournal e FileSystemJournalListener oferecem uma maneira de detectar alterações ao sistema de arquivos.
- ExtendedFileConnectionExtendedFileConnection permite a criptografia e a proteção de arquivos.
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.