GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[Ajuda] Como abrir um arquivo de texto J2me


#1

Pessoal eu n entende nada de java, mas to precisando muito fazer um programa que abra o arquivo que está em txt que será colocado numa pasta dentro do jar só que eu n sei nem por onde começar.

Eu lí umas dúvidas aqui no forum, mas n consegui nada....

Bem eu gostaria que o meu aplicativo jar fizesse isto:
Ele apenas leia o arquivo de texto, que por sinal é muito grande, mas n passa de 1mb
E que antes dele ler tenha uma página que tenha tipo um sistema de busca, onde vai ter digite o número do artigo:
Ai vamos supor que a pessoa coloca 1 ai ele vai para o texto e acha onde está o artigo 1. ( o texto é único, não está em vários arquivos n, apenas em um txt.
Exemplo:
Artigo 1- os princípios para uma boa alimentação são:
Lah na primeira página se a pessoa coloca o número 1 ele vai para o artigo 1, se colocar 2 vai pro 2 e assim sucessivamente...

Alguém pode me ajudar??
Desde já muito obrigado!!


#2

Se não entende nada de j2me experimente:

http://guj.com.br/article.show.logic?id=33

tem mais:
http://guj.com.br/article.list.logic#category_26

Agora se não entende nada de java, ai fudeu, e se não entende nada de OO ai tá perdido mesmo.
Isso se você não tiver tempo, mas se tiver ai ta sussa, nada que uma boa estudada não resolva.

Agora: Se tiver duvidas em alguma coisa pode procurar agente.
Abraços
Ricoldi


#3

Cara, obrigado pela ajuda, na verdade eu não sou tão analfabeto assim em criar aplicativos j2me, já criei uma vez um que envolvia texto também só que eu utilizava a ferramenta que tem no netbeans...
Continuo usando o netbeans só que agora não posso usar mais a ferramenta visto que o texto que quero abrir pelo j2me é um texto muito grande e os textos que eu utilizava antes não passavam de 30kb ou 2 páginas no word...

A única coisa que quero saber a princípio é como posso abrir/ler um arquivo que está no formato .txt pelo java de um celular...
Eu conheço um programa chamado Hinário Adventista Mobile que utiliza esse sistema, é bem parecido com o que estou querendo...

Alguém poderia da uma olhada e me ajudar a fazer???

A única diferença desse para o meu é que nele vc coloca o número do hino e ele abre o arquivo txt que vc chamou pelo número colocado, no meu o texto é único, contínuo em um só arquivo...

E ao invés de ao colocar o número para abrir o arquivo que tem o número correspondente eu queria que ao colocar o número o aplicativo localizasse no meu texto onde está aquele número entendeu??


#4

Como disse que ja fez um programa parecido e ai nesse caso é tudo classe e interface, nem vou entrar em detalhes ridiculos.

Para carregar o stream do arquivo é simples:

 Sua classe.getClass().getResourceAsStream(sua pasta dentro do jar + arquivo);

getResourceAsStream(): http://java.sun.com/javame/reference/apis/jsr118/java/lang/Class.html#getResourceAsStream(java.lang.String)

Para ler basta percorrer o stream de N formas, pode usar DataInputStream, existe uma boa ferramenta pra te ajudar caso não tenha muita intimidade com os Streams do java
http://www.google.com.br/search?hl=pt-BR&q=ler+arquivo+txt+dentro+do+jar+j2me&meta=lr%3Dlang_pt
Ali ta praticamente mastigadinho e olha tem até o seu post!

Mais facil que isso só o código pronto.

Espero ter ajudado, abraços.
Ricoldi


#5

sim, mas onde eu coloco esse código que vc me mandou...

Eu achei esse código aki também, n sei se pega, mas tb n sei onde posso colocar....

Me da um luz ai moral

public String lerArquivo(){   
           try{   
              int chr = 0;   
              InputStream arquivo = getClass().getResourceAsStream("config.txt");   
              StringBuffer stb = new StringBuffer();   
              while ((chr = arquivo.read())!= -1)  {   
                    stb.append((char)chr);   
                }   
              return stb.toString();   
              }catch (Exception e){   
                e.printStackTrace();   
              }   
           return null;   
        }

#6

Como assim "onde coloca esse código?" isso ai não é plug de computador, que cada um tem seu lugar especifico. isso é código, você tem que entender o que esta escrito, nem sabe o que esta acontecendo ali.

Acho que tudo que precisa esta no outro post, basta "perder" um tempo lendo e entendendo, garanto que se fizer isso vai entender.

Quem dá luz é mulher gravida e o povo da CPFL, Se tiver duvidas pergunte...
Abraços, Ricoldi.


#7

velho, mesmo sendo código cada código tem um lugar certo de colocar...
Imagine se eu fizesse um .php começando de baixo pra cima?

Não ia funcionar, principalmente se fosse acesso a uma db....

Não sei se vc reparou o que eu escrevi acima, mas utilizo o Netbeans para desenvolver o aplicativo, e nele tem uma função que é Midlet Visual onde eu faço eu desenvolvo como se estivesse utilizando o dreamweaver para criar site... Por isso perguntei onde colocar o código...

Mas tudo bem...

estou utilizando agora este código:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 * @author Decco2
 */
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class constituicao extends MIDlet implements CommandListener{
	private Display display;
	private Form form;
	private Command read, exit;
	private Alert alert;
        ImageItem imagem;
	public constituicao(){
		display = Display.getDisplay(this);
		read = new Command("Iniciar", Command.SCREEN, 1);
		exit = new Command("Sair", Command.EXIT, 1);
		form = new Form("Bem Vindo...");
		form.addCommand(exit);
		form.addCommand(read);
		form.setCommandListener(this);
	}
	public void startApp(){
		display.setCurrent(form);
	}
	public void pauseApp(){}
	public void destroyApp(boolean unconditional){
		notifyDestroyed();
	}
	public void commandAction(Command c, Displayable s){
		String label = c.getLabel();
		if (label.equals("Iniciar")){
			String string = file();
			if (string != null){
				alert = new Alert("Constituição Mobile", string, null, null);
                                alert.setTimeout(Alert.FOREVER);
				display.setCurrent(alert, form);
			}
		} else if (label.equals("Sair")){
			destroyApp(false);
		}
	}
	private String file(){
		InputStream is = getClass().getResourceAsStream("constituicao/constituicao.txt");
		StringBuffer sb = new StringBuffer();
		try{
			int chars, i = 0;
			while ((chars = is.read()) != -1){
				sb.append((char) chars);
			}
			return sb.toString();
		}catch (Exception e){}
		return null;
	}
}

Só estou com uma dúvida agora, como faço para inserir uma figura nesse código, quero que a figura apareça na tela, a figura é logo.png mas n estou conseguindo colocar nenhum código...


#8

Deixa eu dar minha cacetada do dia... :lol:

Pare de usar a parte visual pois se realmente quer fazer algo decente, quer aprender, o correto é fazer o código do zero, no braço.
Quem opta em usar o Visual vai ficar com estas dúvidas mesmo e agora nós entendemos sua dúvida de "onde colocar o código"
Faça o que o ricoldi disse, estude mais, pois você está "patinando" no básico e desse jeito não vai sair do lugar.


#9

eu ocnsegui colocar o código para não da erro, mas ele n está visualizando o arquivo txt alguém pode me ajudar?

ai o código que coloquei para essa form

public Form getConstituição() {
        if (constituição == null) {
            // write pre-init user code here
            constituição = new Form("Constitui\u00E7\u00E3o Mobile", new Item[] { });
	    constituição.getClass().getResourceAsStream("constituicao/constituicao.txt");
            InputStream is = getClass().getResourceAsStream("constituicao/constituicao.txt");
		StringBuffer sb = new StringBuffer();
		try{
			int chars, i = 0;
			while ((chars = is.read()) != -1){
				sb.append((char) chars);
			}
		}catch (Exception e){}
		return null;
        }
        return constituição;
    }

#10

Na boa cara, acho que está com preguicinha, pois é óbvio porquê não exibe o conteúdo:

você não está fazendo nada com o StringBuffer após ele receber o conteúdo do arquivo !!!! :?


#11

velho eu não sei fazer por isso mesmo estou aki, se eu já soubesse n estaria postando aki
só estou pedidno ajuda para fazer isso??

o que é que custa ajudar?


#12

Fala mestre boone, vlw ai.

Decco, seguinte.

Estamos aqui para ajudar, mas é normal que qualquer pessoa que não seja um professor e que pior, não ganha para isso, deixar de ficar nervoso com certas pessoas as vezes nem é seu caso, mas aqui vem gente que na verdade não quer nem saber ou aprender só quer fazer o trabalho da facul, ou o extra, ou o trampo chato que o chefe mandou, e por isso não temos como saber quem esta realmente con dificuldade e quem quer só uma mamata.

Sobre seu problema era exatamente disso que eu estava falando:

Nào sei o quanto sabe de programação mas creio que esse problema é obvio para qualquer programador em qualquer linguagem. O que esta acontecendo, não tem ideia do que o código faz, mas ele pelo visto esta populando o seu StringBuffer e como o boone disse não esta fazendo nada com ele. Para exibir o conteudo é só dar um sb.toString(). porem onde vai jogar isso eu não sei, para testar pode usar:

System.out.println("Conteudo:" + sb.toString());

Isso vai dar a saida no console do emulador, mas para exibir na tela do celular pode usar um TextField, ou algo melhor.
http://www.google.com.br/search?hl=pt-BR&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=HK1&q=j2me+textfield&btnG=Pesquisar&meta=

Espero que isso lhe ajude.
Att
Ricoldi


#13

cara eu consegui colocando ao invés de uma textField uma stringItem, mas quando abre parece ue o arquivo tah em branco, pq ele n aparece nada do texto! Ajuda ai por favor;;;

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem ">
    /**
     * Returns an initiliazed instance of stringItem component.
     * @return the initialized component instance
     */
    public StringItem getStringItem() {
        if (stringItem == null) {
            // write pre-init user code here
            stringItem = new StringItem("", null, Item.PLAIN);
            stringItem.getClass().getResourceAsStream("constituicao/constituicao.txt");
            InputStream is = getClass().getResourceAsStream("constituicao/constituicao.txt");
        StringBuffer sb = new StringBuffer();
        try{
            int chars, i = 0;
            while ((chars = is.read()) != -1){
                sb.append((char) chars);
                System.out.println("Constituição Mobile" + sb.toString());
            }
        }catch (Exception e){}
        return null;
        }
        return stringItem;
    }
    //</editor-fold>

#14

Sei que pra algumas pessoas é dificil aprender a pescar, se você não entender isso aqui se mata...

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.midlet.*;
/**
 * @author ricoldi
 */
public class Main extends MIDlet {
    public void startApp() {
        try {
            InputStream canal = getClass().getResourceAsStream("teste.txt"); //Abro o canal com o arquivo dentro do jar (getResourceAsStream)
            String conteudo = lerArquivo(canal); //Chamo o metodo que lê o conteudo e retorna a string
            System.out.println("Conteudo [" + conteudo + "]"); //Exibo o conteudo da string no console do emulador
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private String lerArquivo(InputStream canal) throws IOException {
        if (canal == null) { //Verifico se o canal não é nulo por questões de segurança
            return new String();
        }
        canal = new DataInputStream(canal); //Jogo o canal em um DataInput porque segundo a documentação do java a classe Input pode nem sempre retornar a quantidade de bytes corretamente
        byte[] dados = new byte[canal.available()]; //Crio um byte[] do tamanho do bytes dentro do canal (Tamanho do arquivo)
        canal.read(dados); //Mando o canal popular o byte[] (Por ser do tamanho do arquivo ele vai ler todo o conteudo de uma vez e jogar na memoria e depois na string). Neste ponto é interessante dependendo do tamanho do arquivo lêr em buffers ao invéz de tudo de uma vez, mas fica no gosto do desenvolvedor
        return new String(dados); //Crio uma string com base do bytes lidos do canal e retorno
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
}

Até roda se for testar...

Abraços
Ricoldi


#15

cara a questão não é saber pescar ou não vei, a questão é onde colocar esse código para funcionar, se eu te passar o meu código inteiro você adapta ele no meu ??


#16

Tá de sacanagem comigo né...


#17

pq brincando?? vei, vc tem msn, me add pra gente conversar na moral....


#18

cara, só estou com um problema agora, e sei que se resolver isso vai funcionar tudo...

repare essa parte do código

public Form getConstituição() {
        if (constituição == null) {
            // write pre-init user code here
            constituição = new Form("Constitui\u00E7\u00E3o Mobile", new Item[] { getStringItem() });
            constituição.addCommand(getBackCommand());
            constituição.setCommandListener(this);
            // write post-init user code here
        }
        return constituição;
    }

Me diz ai ali onde tem getStringItem}); me ajude a no lugar dele puxar uma StringItem puxar apenas uma String e tudo ficará certo e eu paro de enher vcs;

Desde já obrigado


#19

Por favor me ajuda ai, como é que eu faço para puxar uma string numa form??

desde já agradeço


#20