[Ajuda] Como abrir um arquivo de texto J2me

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!!

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

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??

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

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; }

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.

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:

[code]/*

  • 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;
}

}[/code]

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…

[quote=decco]vutilizo 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…
[/quote]

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.

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

[code]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;
}[/code]

[quote=decco]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

[code]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;
}[/code][/quote]

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 !!! :?

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?

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:

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

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;;;

[code]//
/**
* 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>[/code]

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

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 ??

Tá de sacanagem comigo né…

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

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

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

desde já agradeço