boa noite pessoal.
este código
[code]import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Teste {
public static void main(String[] args) {
try {
//abre o arquivo
FileReader fr = new FileReader("lista.txt");
BufferedReader br = new BufferedReader(fr);
String temp;
//A cada interação, é uma linha do arquivo e atribui-a a temp
String textoArquivo = "";
while ((temp = br.readLine()) != null)
{
//Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
System.out.println(temp);
}
}
catch (FileNotFoundException el)
{
System.out.println("Arquivo não Encontrado!");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}[/code]
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…
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.
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 
[/editado]
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
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.
blz, entendi a lógica, mas não consegui emplementar, alguem poderia me ajduar a implementar esse algoritmo???
usando o tokenizer
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.
fiz assim
[code]import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import sun.io.Converters;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.ExplicitGroup;
public class Teste {
public static void main(String[] args) {
try {
//abre o arquivo
FileReader fr = new FileReader("lista.txt");
BufferedReader br = new BufferedReader(fr);
String temp;
//A cada interação, é uma linha do arquivo e atribui-a a temp
while ((temp = br.readLine()) != null)
{
//Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
String[] a = temp.split(";");
System.out.println(a);
}
/*Scanner ler = new Scanner (new File("D:\Meus Documentos\Algoritmos em JAVA\Teste\lista.txt"));
while(ler.hasNext())
{
String aux = ler.next();
String[] a = aux.split(";");
System.out.println(a);
}*/
}
catch (FileNotFoundException el)
{
System.out.println("Arquivo não Encontrado!");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
[/code]
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…
Pq vc mandou imprimir o array.
Tente assim:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import sun.io.Converters;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.ExplicitGroup;
public class Teste {
public static void main(String[] args) {
try {
//abre o arquivo
FileReader fr = new FileReader("lista.txt");
BufferedReader br = new BufferedReader(fr);
String temp;
//A cada interação, é uma linha do arquivo e atribui-a a temp
while ((temp = br.readLine()) != null)
{
//Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
String[] a = temp.split(";");
for( String each : a )
System.out.println(each);
}
/*Scanner ler = new Scanner (new File("D:\Meus Documentos\Algoritmos em JAVA\Teste\lista.txt"));
while(ler.hasNext())
{
String aux = ler.next();
String[] a = aux.split(";");
for( String each : a )
System.out.println(each);
}*/
}
catch (FileNotFoundException el)
{
System.out.println("Arquivo não Encontrado!");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
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…
[quote=Marcaobu]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…[/quote]
Desculpa, não entendi. Podia explicar de novo??
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
[code]import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.CodingErrorAction;
import java.util.Scanner;
public class Teste {
private static String codigo,descricao, preco;
public static void main(String[] args) {
try {
//abre o arquivo
FileReader fr = new FileReader("lista.txt");
BufferedReader br = new BufferedReader(fr);
String temp;
//A cada interação, é uma linha do arquivo e atribui-a a temp
while ((temp = br.readLine()) != null)
{
//Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
String[] a = temp.split(";");
int i=0;
for(String each : a)
{
if(i==0){
codigo=each;
System.out.println(codigo);
}
if(i==1){
descricao=each;
System.out.println(descricao);
}
if(i==2){
preco=each;
i=-1;
System.out.println(preco);
}
i++;
}
}
}
catch (FileNotFoundException el)
{
System.out.println("Arquivo não Encontrado!");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
[/code]
[code]import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class LeProdutos
{
private static List produtos = new ArrayList();
public static void main(String[] args)
{
try
{
//abre o arquivo
FileReader fr = new FileReader("lista.txt");
BufferedReader br = new BufferedReader(fr);
String temp;
Produto produto = null;
//A cada interação, é uma linha do arquivo e atribui-a a temp
while ((temp = br.readLine()) != null)
{
//Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
String[] a = temp.split(";");
// a[] = {produto, descricao, preco}
produto = new Produto(a[0], a[1], a[2]);
produtos.add(produto);
}
}
catch (FileNotFoundException e)
{
System.out.println("Arquivo não Encontrado!");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class Produto
{
private String codigo;
private String descricao;
private double preco;
public Produto(String codigo, String descricao, String preco)
{
this.codigo = codigo;
this.descricao = descricao;
this.preco = Double.parseDouble(preco);
}
}[/code]
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.
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.(Produto.java:11)
at LeProdutos.main(LeProdutos.java:28)
o que será q está dando de errado com o preco???
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:
[code]// Produto.java
public class Produto
{
CódigoProduto código;
String descrição;
Moeda preço;
public Produto (String código, String descrição, String preço)
{
this.código = new Código(codigo);
this.descrição = descrição;
this.preço = new Moeda(preço);
}
}[/code]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.
blz… comprendi +/-, eu fiz aqui e está funcionando…
e como faço para classificar os produtos por ordem de preço??? posso usar o Collections.sort(List, Comparator)…
alguem pode me dar um exemplo… pois nunca utilizei esse comando… nao faço nem idéia de como utilizá-lo
obrigado