abrir arquivo txt, e adicionar em uma lista.  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

boa noite pessoal.

este código


está abrindo meu arquivo .txt

o resultado fica assim

Codigo;Descricao;Preco
9603;ADAPTADOR USB VIRTUAL HD KEY JETZ;23.50
7963;CABO ADAP. FONTE 20/24 PINOS;1.50
2085;CABO AUDIO DIGITAL P/CD-ROM/DVD/GRAVADOR;1.00
6100;CABO HD IDE HD/CD ROM/GRAVADOR;1.50
31836;CABO HDMI X DVI-D 1,83M (6 FT);20.00
10305;CABO HDMI X DVI-D 3,05M (10 FT);22.00
18315;CABO HDMI X HDMI 1,83M (6 FT);18.00
30518;CABO HDMI X HDMI 3,05M (10 FT);21.00
14183;CABO HDMI X MINI HDMI 1,83M (6 FT);23.00
25;CABO PARALELO P/ IMPRESSORA (E);2.50
1625;CABO SCSI 50 PINOS;6.50
1287;CABO SCSI 68 PINOS UW .;6.50
2347;CABO SERIAL DB25M/F P/ MODEM EXT. RS232;2.50
2315;CABO SERIAL IMPRESORA DB25M/M;2.50
7530;CABO USB A/B P/ IMPRE E SCANNER;3.00
6223;CALCUL. HP 12C FINANC. INGLES;85.00
128;CALCUL. HP 12C FINANC. PORTUGUES;85.00
2343;CAM. BATERIA AIPTEK US-N 5700/GEN.DV610;8.00
2344;CAM. BATERIA AIPTEK US-P 5200/6800;8.00
2819;CAM. CARRE.P. SONY BCG-34HLD2 A PALITO;9.50
65459;CAM. CARRE.P. SONY BCG-34HLD4 ANLOG;17.00
670;CAM. CARRE.P. SONY BCG-34HRMF4 2700;29.00


o dados estão separados por ;
como eu faço para adicionar cada um deles em uma lista. vou ter de criar 3 vetores String???

alguem pode me dar uma ajuda

os meus tres Array seriam assim?

String codigo[], descricao[], preco[];

e como faço para cada item entrar dentro do Array correto...
cara to quebrando muito a cabeça, mas não consigo....

obrigado por enquanto.....
[MSN]
fernandoeick
JavaGuru
[Avatar]

Membro desde: 24/01/2007 14:18:48
Mensagens: 286
Localização: Ijui - RS
Offline

Sugestão:
Dê uma estudada em StringTokenizer:
http://java.sun.com/javase/6/docs/api/

Crie um token, em seu caso será o ";". Cada vez que encontrar o token, você manda o conteúdo para um ArrayList por exemplo (no seu caso seriam três). Em cada linha, você tem três tokes, daí vc itera no swicth. Quando leu os três tokens significa que mudou de linha e vc recomeça o switch no primeiro case e recomeça a inserção dos valores nos Arrays...

A lógica é essa. Só te resta implementar.
Abraço.

E dá-lhe Grêmio!
[MSN]
Andre Brito
Virtual Machine Man
[Avatar]

Membro desde: 21/07/2007 17:44:31
Mensagens: 786
Localização: Paraná
Offline

Você pode fazer muitas coisas.
Uma delas é usar uma lista de Strings, como você falou (se você fizer usando Collections em vez de arrays 'primitivos', com o [], fica mais fácil).
Outra é usar um ArrayList e armazenar um objeto que contenha o código, o nome e o preço.
Outra ainda é usar um Map, que como key tenha o código e como o value tenha um objeto, com String e o preço. Você ainda pode adicionar uma descrição e afins. (eu ficaria com essa).

Pra cuidar que cada um entre no array correto, procure por StringTokenizer.
Ou ainda, você pode usar o método split da classe String (split(";")) e passar a primeira posição para o array código, a segunda para o array nome e a terceira pro array de preços.

[editado]
opz, foi junto :p
[/editado]

This message was edited 1 time. Last update was at 04/05/2008 22:10:35

alves.Felipe
Debugger

Membro desde: 21/01/2008 13:45:56
Mensagens: 67
Localização: Curitiba - Pr
Offline

Ola,

cara.. acho que seria mais fácil usar o tokenizer para separar os itens, e criar um objeto Produto. Que vc setaria o código,
descrição e preço, e adicionaria um único ArrayList o objeto Produto. Assim não iria ter problemas para obter os valores depois..

abraco

Felipe Alves
lucamartins
Thread.start()
[Avatar]

Membro desde: 30/04/2008 15:17:55
Mensagens: 47
Offline

O ideal seria criar um Objeto seu que encapsule estes atributos, então vc lê do aquivo usando o StringTokenizer, conforme sugestão, e para cada linha do arquivo vc cria um novo objeto e insere na sua lista.

== The C Style old school ==

System.out.printf("%s", Luca.getDefault().toString() )
out: AOWushu por default!
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

blz, entendi a lógica, mas não consegui emplementar, alguem poderia me ajduar a implementar esse algoritmo???

usando o tokenizer
[MSN]
Bruno Laturner
Virtual Machine Man

Membro desde: 18/02/2008 16:17:53
Mensagens: 692
Localização: 78050-000, Brazil
Offline

Dentro do while que lê cada linha, use um temp.split(";"); e jogue seu retorno pra um array de String.

adicione a posição 0 desse array a uma lista que conterão os códigos, posição 1 p/ uma lista de descrição, 2 p/ de preço.

Depois faça o que quiser com essas listas.


Eu particulamente implementaria um classe produto pra conter codigo, descrição e o preço, e só usaria uma lista de produtos pra conter tudo.

A resposta acima foi achada em menos de 5 minutos no google.
A API do Java é como o Lego, para brincar basta sair procurando as peças que se encaixam.
The prisoner falls in love with his chains. --E.W. Dijkstra
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

fiz assim




só que a saida quando mando escrever só para teste fica assim
[Ljava.lang.String;@19189e1
[Ljava.lang.String;@1f33675
[Ljava.lang.String;@7c6768
[Ljava.lang.String;@1690726
[Ljava.lang.String;@5483cd
[Ljava.lang.String;@9931f5
[Ljava.lang.String;@19ee1ac
[Ljava.lang.String;@1f1fba0
[Ljava.lang.String;@1befab0
[Ljava.lang.String;@13c5982
[Ljava.lang.String;@1186fab
[Ljava.lang.String;@14b7453
[Ljava.lang.String;@c21495
[Ljava.lang.String;@1d5550d
[Ljava.lang.String;@c2ea3f
[Ljava.lang.String;@a0dcd9
[Ljava.lang.String;@1034bb5
[Ljava.lang.String;@15f5897
[Ljava.lang.String;@b162d5
[Ljava.lang.String;@1cfb549
[Ljava.lang.String;@186d4c1
[Ljava.lang.String;@f9f9d8
[Ljava.lang.String;@1d9dc39



to ficando doido já.......
meu deus do céu.........
[MSN]
lucamartins
Thread.start()
[Avatar]

Membro desde: 30/04/2008 15:17:55
Mensagens: 47
Offline

Pq vc mandou imprimir o array.

Tente assim:

This message was edited 1 time. Last update was at 06/05/2008 22:24:59


== The C Style old school ==

System.out.printf("%s", Luca.getDefault().toString() )
out: AOWushu por default!
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

Cara, deu certinho.... muito obrigado pela ajuda... já está separando tudinho por ;

vc é minto gente boa manow, brigadão.....

tem como vc me dar uma idéia de como incrementar para receber cada informção dentro de um array. para em seguinda eu classificar pelo preço???

serria um array para, codigo, descrição e preco
um para kada

muito obrigado...
[MSN]
lucamartins
Thread.start()
[Avatar]

Membro desde: 30/04/2008 15:17:55
Mensagens: 47
Offline

Marcaobu wrote:Cara, deu certinho.... muito obrigado pela ajuda... já está separando tudinho por ;

vc é minto gente boa manow, brigadão.....

tem como vc me dar uma idéia de como incrementar para receber cada informção dentro de um array. para em seguinda eu classificar pelo preço???

serria um array para, codigo, descrição e preco
um para kada

muito obrigado...

Desculpa, não entendi. Podia explicar de novo??

== The C Style old school ==

System.out.printf("%s", Luca.getDefault().toString() )
out: AOWushu por default!
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

e ai blz... é o seguinte... depois de feito a leitura das informações do arquivo, eu preciso separar os dados, são 3 informações, codigo, descricao, preco
feito isso, coloquei dentro do array, cada um deles....

a maneira que fiz axei tipo uma gambeara.... deve ter forma melhor para melhorar este código.... gostaria de umas sugestões...

e como eu faria para ordenar pelo preço dos produtos.....

segue o código
[MSN]
Bruno Laturner
Virtual Machine Man

Membro desde: 18/02/2008 16:17:53
Mensagens: 692
Localização: 78050-000, Brazil
Offline



Fica tudo dentro e organizado da sua lista de produtos. Use o Collections.sort(List, Comparator) e implemente um Comparator para ordenar por qqr campo que quiser.

This message was edited 2 times. Last update was at 11/05/2008 23:59:46


A resposta acima foi achada em menos de 5 minutos no google.
A API do Java é como o Lego, para brincar basta sair procurando as peças que se encaixam.
The prisoner falls in love with his chains. --E.W. Dijkstra
Marcaobu
Thread.start()

Membro desde: 29/03/2008 08:24:29
Mensagens: 43
Offline

blz, teu código ta bem fácil de entender, e muito legal....
só que ta gerando esse erro na hora de exeutar.....

Exception in thread "main" java.lang.NumberFormatException: For input string: "Preco"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at Produto.<init>(Produto.java:11)
at LeProdutos.main(LeProdutos.java:2


o que será q está dando de errado com o preco????
[MSN]
Bruno Laturner
Virtual Machine Man

Membro desde: 18/02/2008 16:17:53
Mensagens: 692
Localização: 78050-000, Brazil
Offline

Algum dos preços do teu arquivo deve estar com formato errado, o número deve ser somente números, com ponto separando as cadas decimais, mais nada, nem espaços.

Tópicos mais avançados p/ estudo, só siga quando souber mais sobre o assunto:
----------------

Sobre a classe Produto, eu a refaria do seguinte modo:
Isso é só um exemplo, depois dentro do construtor(ou algo do tipo) de cada classe tratar as Strings de acordo para representarem o valor interno apropriado da classes. Esse código é por que a representação do código pode mudar, e também pode ser diferente na hora de colocar do banco de dados, não é uma boa idéia usar Strings como chaves primárias. Quanto ao preço, ele também recebe a sua classe que tem seus próprios métodos de cálculo de valores, conversão entre moedas, e formatação.

Obs: Isso pode ser um pouco avançado demais, mas é essencial em um código que vá rodar numa aplicação de verdade. Se não entender agora, guarde de exemplo pra depois, e implemente como estava antes, só com Strings e o double.

This message was edited 1 time. Last update was at 18/05/2008 22:53:11


A resposta acima foi achada em menos de 5 minutos no google.
A API do Java é como o Lego, para brincar basta sair procurando as peças que se encaixam.
The prisoner falls in love with his chains. --E.W. Dijkstra
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team