Pesquisar no Programero

quinta-feira, 7 de agosto de 2008

Desenvolvimento de aplicações para dispositivos móveis III (Java)

Completanto essa série de três artigos de introdução ao desenvolvimento de aplicações para dispositivos móveis vamos falar de escrita e leitura em arquivos texto. Algo primordial já que boa parte das aplicações necessita de persistencia para os dados.
No j2me existem outras formas para a persistencia, como o RMS, plugins como o Floggy ou mesmo XML, é provável que em posts futuros iremos apresentar como trabalhar com RMS, que é o método mais indicado, mas aqui o nosso foco será o bom e velho TXT.

Iniciando...

Vamos aproveitar a aplicação feita no post anterior e adicionar a ela os elementos necessários, que são:
- 1 textBox com três itemCommand, sendo um para salvar, outro para carregar e o ultimo para sair (ligando esse ultimo ao form).
- 1 itemCommand no form que deve ser ligado a nosso textBox

Nosso fluxo agora ficará assim:


Agora os imports utilizados:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

Logo no inicio de nossa classe precisaremos definir o caminho onde nosso arquivo estará, assim como seu nome:

private String diretorio = "fileconn.dir.memorycard";
private String path = System.getProperty(diretorio) + "meuArq.txt";

Agora nossos métodos para salvar e mostrar o conteudo do arquivo:

//
//Salvando o arquivo

private void saveFile(String fileName, String string) {
try {
//se conecta ao arquivo
FileConnection fconn = (FileConnection)Connector.open(fileName, Connector.READ_WRITE);
//se o arquivo não existir então ele é criado
if (!fconn.exists()) {
fconn.create();
}
//implementação da escrita
OutputStream ops = fconn.openOutputStream( Long.MAX_VALUE );
string = string + "\r\n";
ops.write( string.getBytes() );
//grava obrigatoriamente todos os bytes que estiverem no buffer
ops.flush();
ops.close();
fconn.close();
}
catch (IOException ioe) {
System.out.println("IOException: "+ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Exceção de segurança:" + se.getMessage());
}
}

//
//Carregando o arquivo

public void showFile(String fileName) {
try {
//se conecta ao arquivo
FileConnection fc = (FileConnection)
Connector.open( fileName );
//se não existir ocorre a exceção
if(!fc.exists()) {
throw new IOException("Arquivo não existe");
}
//implementação da leitura
InputStream is = fc.openInputStream();
byte b[] = new byte[is.read()];
is.read(b);
//o textBox recebe o conteúdo do arquivo texto
textBox.setString( new String(b, 0, b.length) );
is.close();
fc.close();
}
catch (IOException ioe) {
System.out.println("IOException: " + ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Exceção de segurança:" + se.getMessage());
}

}

Agora é só ir até commandAction for Displayables e adicionar:
//para nosso itemCommand5
saveFile(path, textBox.getString());
//para nosso itemCommand7
showFile(path);

Finalizando

Seria interessante que as classes OutputStream e IntputStream fossem verificadas afim de um melhor conhecimento.
A maneira de envio e recebimento de arquivos seja por meio de uma porta de comunicação como o infravermelho, ou por http é muito semelhante ao que acabamos de ver, salvo suas caracteristicas especificas, por isso é interessante estudar esse pequeno exemplo já que provavelmente essa idéia ainda será utilizada.
Em artigos futuros, demonstraremos como receber e enviar arquivos pela web, e como trabalhar com o RMS para persistência de dados.

2 comentários:

  1. Muuuuuito BOM !!!!

    Excelente Artigo. Fácil de entender e

    Objetivo.

    Parabéns

    ResponderExcluir
  2. Olá Anônimo,
    muito obrigado pelos elogios, espero que continue a nos prestigiar, abraços...

    ResponderExcluir

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.