A JSR 75 especifica dois pacotes obrigatórios para a plataforma Java ME.
- O Pacote opcional de conexão de arquivos (FCOP) - Permite aos desenvolvedores o acesso de diversas formas de dados, tais como imagens, sons, vídeos, txt e muito mais, sobre o sistema de arquivo do dispositivo móvel.
Isto inclui dispositivos de armazenamento removíveis, como cartões de memória. O acesso a ambos os PIM e arquivos de dados permitem a integração de aplicações com informações sobre o dispositivo, permitindo aplicações mais inteligentes.
Abaixo estão as importantes classes e interfaces:
* ConnectionClosedException é lançada quando um método é invocado em uma FileConnection quando a conexão é fechada.
* FileSystemRegistry classe é a central de registros e tem a habilidade de listar roots montadas através do método listRoots().
* Ela também providencia métodos para os ouvidores de registros (Registering listeners), estes são notificados se sistemas de arquivos são adicionados ou removidos durante o tempo de execução.
* A FileSystemListener interface é usada para recepção de notificações de status quando é adicionado ou removido um sistema de arquivo raiz.
* A FileConnection interface é usada para acessar diretórios e arquivos no dispositivo.
Ela extende a Connection interface e mantêm inúmeros métodos uteis para criar, remover diretórios e arquivos, lista de conteúdo de diretórios, configurar permissões, obter informações de arquivos e efetuar operações de entrada e saída nos arquivo
Os pacotes usados são:
javax.microedition.pim
javax.microedition.io.file
Iremos explorar o segundo pacote, O Pacote opcional de conexão de arquivos (FCOP).
um pacote opcional é um conjunto de interfaces de programação que podem ser adicionados a um perfil J2ME ou configuração para fornecer uma categoria de funcionalidade que alguns usuários de que a configuração ou perfil vai precisar, mas não todos. FCOP pode ser suportado em qualquer plataforma J2ME, porque depende apenas de o núcleo de classes definidas pelo CLDC.
Propriedades do sistema
Para verificar se a “FileConnection API” está implementada use:
String v = System.getProperty("microedition.io.file.FileConnection.version");
if( v != null ){
System.out.println(v);
} else {
//FCOP não encontrada
}
Isto deverá retornar “1.0” se ela estiver implementada.
Uma forma de acessar os arquivos é utilizando a FCOP através da interface FileConnection, muito usada por sinal. Para isto basta importar o pacote javax.microedition.io.file.FileConnection.
A FileConnection estende StreamConnection pela adição de métodos de arquivo e diretório manipulação. A funcionalidade adicional é semelhante à que se encontram disponíveis no J2SE da classe java.io.File. Para a abertura de um arquivo é usado um URL no formato: file://host/path
Algumas URLs:
CFCard/ - FileConnection fc = (FileConnection) Connector.open("file:///CFCard/dados.txt");
SDCard/ - FileConnection fc = (FileConnection) Connector.open("file:///SDCard/dados.txt");
MemoryStick/ - FileConnection fc = (FileConnection) Connector.open("file:///MemoryStick/dados.txt");
C:/ - FileConnection fc = (FileConnection) Connector.open("file:///C:/dados.txt");
/ - FileConnection fc = (FileConnection) Connector.open("file:////dados.txt");
Para memória interna use "file://localhost/c:/" ou "file:///c:/"
Para cartão de memória "file://localhost/e:/" ou "file:///e:/"
Uma “FileConnection” que está apontando para um arquivo não existente não estará habilitada para executar nenhuma operação específica em arquivos ou diretórios. Por exemplo, se você estiver tentar abrir um “InputStream” ou um “OutputStream”, uma java.io.IOException será lançada.
A única diferença é quando a “FileConnection” é aberta e o método create() ou mkdir() é invocado para criar o arquivo ou diretório no sistema de arquivo.
FileConnection fc;
Você sempre pode verificar se o arquivo/diretório existe: fc.exists();
Se ele não existir crie um novo arquivo: fc.create();
Ou crie um diretório: fc.mkdir();
Para excluir um arquivo ou um diretório: fc.delete();
Para listar o conteúdo do diretório que sua “FileConnection” está apontando:
Enumeration e = fc.list();
while (e.hasMoreElements()) {
System.out.println(((String)e.nextElement()));
}
Este método retorna uma enumeração de todos os diretórios e arquivos que estão presentes no diretório. Diretórios são denotados com uma barra “/” em seus nomes retornados. Há uma segunda versão do método list que habilita você à ordenar o conteúdo com um filtro:
list(String filter, boolean includeHidden)
O método retorna o conteúdo que é passado pelo filtro, o filtro poderia ser “*.mp3” para listar apenas arquivos que terminam com .mp3. Use o atributo includeHidden para indicar quando os arquivos marcados como ocultos devem ser incluídos ou não na lista de arquivos e diretórios retornados. Estes métodos retornam diretórios e arquivos em ordem aleatória, logo você precisa organizá-los manualmente.
O FileSystemRegistry o método estático listRoots() para listar diretórios raízes disponíveis e suportados no dispositivo. A lista retornada com um “Enumeration”:
Enumeration e = FileSystemRegistry.listRoots();
while (e.hasMoreElements()) {
String rootName = (String)e.nextElement();
System.out.println("mounted root:"+rootName);
}
Leitura e escrita de arquivos
Se você tem usado a “GCF connection framework”, você estará bem familiarizado com a leitura e escrita de arquivos. Para escrever um arquivo você necessita pegar um “OutputStream” do objeto “FileConnection” que aponta para o arquivo existente:
OutputStream os = fc.openOutputStream();
os.write(new String("hello").getBytes());
os.close();
Ou você pode usar o “DataOutputStream” para escrever tipos de dados primitivos de java em um arquivo:
int i = 1234;
DataOutputStream ds = fc.openDataOutputStream();
ds.writeInt(i);
ds.close();
Para fazer a leitura de um arquivo você usa o “InputStream” ou um “DataInputStream” de um objeto “FileConnection” que está apontando para um arquivo existente:
byte[] b = new byte[1024];
InputStream is = fc.openInputStream();
is.read(b);
is.close();
Informações sobre diretórios e arquivos
Existem bastante métodos na classe “FileConnection” que são usados para extrair informações sobre diretórios ou arquivos específicos. Aqui estão alguns deles:
boolean canRead() - O arquivo/diretório pode ser lido?
boolean canWrite() - O arquivo/diretório pode ser escrito?
long directorySize(boolean includeSubDirs) - Retorna o tamanho de todos os arquivos, contidos em um diretório, em “bytes”. Se o “includeSubDirs” for “true” o tamanho de todos os sub-diretórios também são incluídos.
long fileSize() - Retorna o tamanho do arquivo em “bytes”.
long lastModified() - Retorna a data de quando o arquivo/diretório foi modificado pela última vez.
Em um próximo post estaremos disponibilizando alguns códigos fonte.
Fonte:
http://java.sun.com/javame/technology/msa/jsr75.jsp
http://wiki.forum.nokia.com/index.php/JSR_75_File_connection_API.
1 comentários:
Valew de coração
Voce ta me ajudando muito
Postar um comentário