j2me: ler arquivo texto (Resolvido)

17 respostas
S

Olá a todos:
não sei como colocar o caminho corretamente para encontrar e ler o arquivo Teste.txt no meu SmartPhone.
Ele está na pasta Application.
Obrigado a quem puder ajudar.

public String lerArquivo(){ try{ int chr = 0; InputStream arquivo = getClass().getResourceAsStream("[b]Teste.txt[/b]"); StringBuffer stb = new StringBuffer(); while ((chr = arquivo.read())!= -1) { stb.append((char)chr); char st = (char)chr; if (st=='\n') { System.out.println("Quebra de linha"); } } return stb.toString(); }catch (Exception e){ e.printStackTrace(); } return null; }

17 Respostas

FernandoFranzini

que plataforma vc esta?

S

j2me
windows mobile 6.5
vm: phoneME

FernandoFranzini

Tem q estar dentro do JAR - http://developers.sun.com/mobility/midp/questions/res/

S

Obrigado Fernando!
Amanhã cedo testo e posto como ficou.
É que estou saindo do trabalho.
Até mais.

S

executo e não acontece nada.
Nem mesmo mensagem de erro:

try {
            Class c = this.getClass();
            InputStream is = c.getResourceAsStream("file:///e:/Application/MDO.txt");
            StringBuffer str = new StringBuffer();
            byte b[] = new byte[1];

            while ( is.read(b) != -1 ) {
                str.append(new String(b));
            }
            is.close();
            System.out.println(str);
        }
        catch (IOException e) {
            mostrarAlerta("ERRO", "Não encontrei arquivo");
        }
FernandoFranzini

Vc ta mostrando o resultado na system…aonde vc ta executando isso? No emulador?

S

É no coletor.
Mas comento a linha do system.out…

FernandoFranzini

Não ta mostrando pq no codigo vc não ta fazendo nada visual…

S

Está dentro de uma Thread e ela não termina, trava.

dj11

tem como postar mais detalhes do codigo? para q possamos verificar melhor onde está o problema…vc falou em um erro na execução de um Thread… parece um erro de lógica e não de código em si…

S

Olá,
mudei para FileConnection para ver no que dá.
E também não consegui.
Caio sempre no exception.
Vai a lógica e o código:

Ao acionar o item de menu importar, chamo o método:
private void connectThread(){
        t = new Thread(this);
        t.start();
    }
que por sua vez:
public void run() { if (sThread.equals("cImporta")){ LeArquivo(); } }
método LeArquivo:
private void LeArquivo(){

        String nomeArquivo = "Silvio.txt";
        try
            {
                FileConnection fc = (FileConnection) Connector.open("file:///e:/Application/" + nomeArquivo, Connector.READ_WRITE);
                if (!fc.exists())
                {
                    mostrarAlerta1("ERRO", "Arquivo não encontrado!!!");
                }
                else
                {
                    InputStream is = fc.openInputStream();
                    byte b[] = new byte[1024];
                    int length = is.read(b, 0, 1024);
                    //form.append("Conteúdo do arquivo "+nomeArquivo + ": \n"+ new String(b, 0, length),null);
                    mostrarAlerta1("CORRETO", "Arquivo encontrado!!!");
                }
                fc.close();
            }
        catch (Exception e)
            {
                mostrarAlerta1("ERRO", "Erro na lógica");
            }
S

Pessoal,
utlizei este comando para verificar se api FileConnection está disponível no aparelho
e não está:

boolean isAPI = System.getProperty("microedition.io.file.FileConnection.Version") != null; if (!isAPI){ mostrarAlerta("ERRO", "JSR75 não disponível"); }else{ mostrarAlerta("CORRETO", "JSR75 disponível"); }

Peço por gentileza o favor de verificarem se estou correto.
É um motorola MC65 - windows mobile 6.5

E

Você só precisa colocar seu texto na pasta “/res” do projeto e para acessá-lo basta colocar o nome dele:

No Netbeans você seleciona o projeto, vai em Propriedades, vai em Bibliotecas & Recursos, Adicionar pasta, e adiciona a pasta /res.

Só isto.

InputStream is = getClass().getResourceAsStream("Texto.txt");
S

Obrigado!!!
Mas pela falta de conhecimento faço uma pergunta:
Posso acessar este arquivo “Texto.txt” em uma pasta do celular ou ele será sempre fixo junto com o aplicativo?
É que este arquivo texto vai estar no celular e vai mudar o conteúdo sempre.
Obrigado!

S

Vejam como ficou:
funcionou legal para Motorola MC65 - windows mobile 6.5
Este site ajudou muito: http://www.lte.com.tr/uploads/pdfa/31.pdf
Obrigado a todos que me ajudaram.

String nomeArquivo = "file:////Application/Silvio.txt"; try { FileConnection fc = (FileConnection) Connector.open("file:////Application/Silvio.txt"); if (!fc.exists()) { mostrarAlerta1("ERRO", "Arquivo não encontrado!!!"); } else { InputStream is = fc.openInputStream(); StringBuffer stb = new StringBuffer(); byte b[] = new byte[1]; int chr = 0; while ((chr = is.read())!= -1) { stb.append((char)chr); char st = (char)chr; if (st=='\n') { //System.out.println("Quebra de linha"); } } is.close(); mostrarAlerta1("CORRETO", stb.toString()); } fc.close(); } catch (Exception e) { mostrarAlerta1("ERRO", "lógica"); }

E

Obrigado!!!
Mas pela falta de conhecimento faço uma pergunta:
Posso acessar este arquivo “Texto.txt” em uma pasta do celular ou ele será sempre fixo junto com o aplicativo?

Eu dei a sujestão anterior porque você estava usando getResourceAsStream(). Para este método o arquivo tem que estar no Jar, como eu te expliquei, e ele fica fixo, não pode ser alterado. Para acessar arquivos você precisa usar FileConnection(). Este link ensina tudo:
http://developers.sun.com/mobility/apis/articles/fileconnection/

Um abraço.

S

Mais uma vez obrigado!!!
É muito bom ter conhecimento.
Agora conheço estas duas maneiras de acessar arquivos textos.
Valeu mesmo.

Criado 30 de novembro de 2011
Ultima resposta 1 de dez. de 2011
Respostas 17
Participantes 4