Lendo um arquivo TXT e depois guardando valores

No Java como eu faço para ler um arquivo txt e depois respeitando seus
espaços entre o valores , pq para ler a linha eu consigo , nao estou
conseguindo ler a um sequencia de valores que esteja em um linha
separadas por espaço.

Ex : tenho um arquivo txt que esta no seguinte formato

5 <---- aki é o meu numero de vertices (aki eu consigo ler)
8 <— aki é o meu numero de arestas tb consigo ler por esta na mesma readline
1 2 3 ja aki só consigo ler a linha inteira em formato de string
4 6 7 aki tb
9 11 23 aki tb

Como faco para ler o valor da linha na sequencia ex:

No se C++ estou fazendo assim:

while(fscanf(arq,"%d %d %d",&a,&b,&c) != EOF)
{
t_Arestas[a-1][b-1] = c;
}

como faço para ler desta mesma forma no java

sendo que o valores 1 2 3 na terceira linha do meu arquivo seja
gravado na variaveis a=1 , b=2 ,c=3

Sxta a noite… e nós aqui hehehe… cara, seria bom dar uma estudada em análise léxica, StringTokenizer primeiro, análise sintática, compiladores hehehe, explica bem com onão ter erros… Mas segue algo que fiz suuuuper rápido… sem tratar exceções nada… mas funcional. Roda ae e vê se ajuda.

[code]/*

  • Created on 21/04/2006
  • To change the template for this generated file go to
  • Window>Preferences>Java>Code Generation>Code and Comments
    */
    package br.eti.kinoshita;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;

/**

  • @author bruno

  • To change the template for this generated type comment go to

  • Window>Preferences>Java>Code Generation>Code and Comments
    */
    public class Teste1 {
    public static void main(String[] args) {
    File f = new File(“input.txt”);
    if(!f.exists())
    {
    System.exit(-1);
    }
    try {
    BufferedReader in = new BufferedReader(new FileReader(f));
    String line;
    int lineCount = 0;
    while((line = in.readLine())!=null)
    {
    System.out.println("LINHA DO ARQUIVO Nº: " + ++lineCount);
    // tokens :slight_smile: léxico total
    StringTokenizer token = new StringTokenizer(line, " ");
    if(token.countTokens() != 3) // sempre serão três tokens não?
    {
    System.err.println(“Erro lendo arquivo”);
    System.exit(-1);
    }
    int a = 0, b = 0 , c = 0;
    while(token.hasMoreElements())
    {
    a = Integer.parseInt(token.nextToken());
    b = Integer.parseInt(token.nextToken());
    c = Integer.parseInt(token.nextToken());
    }
    System.out.println("A : " + a);
    System.out.println("B : " + b);
    System.out.println("C : " + c);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    }
    [/code]

Grande abraço.

Kinoshita.

Nossa, estou fazendo um projeto de compiladores se eu tivesse visto essa classe antes daria uma bela ajuda.

Opa hehehe, se você precisar de ajuda com compiladores, desde análise léxica, até a geração do código objeto hahaha, tento ajudar.

Abraços. Kinoshita.

Ola amigo. a coisa é bem mais simples…porem seu código não funcionou.

O meu arquivo já existe eu não preciso criar um novo…

sendo que na posição 1 do arquivo e pego o valor 5 na posição 2 do arquivo eu pego 8
e nas demais posiçoes consecutivas eu tenho que ler um a um e colocar dentro de um inteiro

ex do meu arquivo

5
8
1 2 3
5 6 7

Estou usando isto para fazer o algoritimo de Floyd Warsal

Valeu pela atenção

Valeu! Ja fiz o léxico de uma forma bizarra ja que é a primeira vez que vemos isso, e é a primeira vez que programamos em Java.

Vou tentar fazer um código mais limpo daqui pra frente.

Entendiiii… hummm… Floyr Warshall… grafos não? Meu deus hehehe, eu sou só um Bacharel de Sistemas hehehe, um Cientista da Computação com certeza poderá te ajudar melhor meu caro, acredito que a classe StringTokenizer mesmo assim vá te ajudar, eu pensei no programa lendo um arquivo sempre assim:

1 2 3
4 5 6

e guardando os valores em variáveis (a b c) para serem utilizadas em algum outro ponto.

Mas só a definição deste algoritmo já me deixa de cabelo em pé hehehe. Sorte!

Abraços, e se precisar de qualque outra ajuda, tentarei ajudar.
:?

[quote=kinow]Entendiiii… hummm… Floyr Warshall… grafos não? Meu deus hehehe, eu sou só um Bacharel de Sistemas hehehe, um Cientista da Computação com certeza poderá te ajudar melhor meu caro, acredito que a classe StringTokenizer mesmo assim vá te ajudar, eu pensei no programa lendo um arquivo sempre assim:

1 2 3
4 5 6

e guardando os valores em variáveis (a b c) para serem utilizadas em algum outro ponto.

Mas só a definição deste algoritmo já me deixa de cabelo em pé hehehe. Sorte!

Abraços, e se precisar de qualque outra ajuda, tentarei ajudar.
:? [/quote]

Putz valeu…más estou justamente fazendo ciencia da computação e esse é um dos trabalhos que preciso entregar…eu consigo fazer isso em C++ na boa…más em java meu amigooo…nunca fi coisa tao dificil de pegar um simples arquivo e ler caracter por caracter e no caso ai em cima tenho que pegar o arquivo texto cujo digito valores em forma de string e depois converto para inteiro…por incrivel que parece o código de Floyd é simples , más isso ai…pelo amor deus …valeu vou continuar tentando abraço…

Então, vamos ver se consigo te ajudar.

Este código vai ler um arquivo do CLASSPATH, ler cada BYTE e imprimir hehehe… se vc precisar de ajuda com Integer, é só ler 5 minutos sobre classes Wrappers do Java, mas acho que não.

public static void main(String[] args) { try { FileInputStream fin = new FileInputStream(new File("input.txt")); while(fin.available() > 0) { Integer in = new Integer(fin.read()); System.out.println("" + in); } fin.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

É só o main…

Aqui está de onde tiro pra mexer com FileInputStream as vezes.

Abraços…

http://www.kickjava.com/598.htm

Olá! Sou iniciante na programação java, ou seja não sei nada, ou quase nada!

Preciso fazer um programinha que leia um arquivo TXT no formato abaixo e coloque os valores respectivos dentro de variáveis, e depois imprima esses valores na tela!

IP NOMEARQUIVO TAMANHO
100.200.300.80 exemplo.exe 1Mb
200.300.600.56 outroexemplo.doc 525Kb

preciso que uma variavel ip-1 receba o valor do primeiro IP nome_arq_1 receba o valor do primeiro nome do arquivo e tam_1 receba o tamanho do primeiro arquivo; que a variavel ip-2 receba o IP da segunda linha e assim por diante…

Alguém poderia me ajudar???

Grato

Eae cara, fiz meio com sono hehehe, mas espero que ajude, coloque um arquivo input.txt, com o conteúdo:

IP NOMEARQUIVO TAMANHO

100.200.300.80 exemplo.exe 1Mb
200.300.600.56 outroexemplo.doc 525Kb

Ele NÃO faz da melhor maneira, apenas educativo.

Abraços, boa noite

[code]/*

  • Created on 07/05/2006
  • To change the template for this generated file go to
  • Window>Preferences>Java>Code Generation>Code and Comments
    */
    package br.eti.kinoshita;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.StringTokenizer;

/**

  • @author bruno kinoshita

  • http://www.kinoshita.eti.br

  • To change the template for this generated type comment go to

  • Window>Preferences>Java>Code Generation>Code and Comments
    */
    public class ArquivoseIP {

    // Main Method, a best solution may use classes
    public static void main(String[] args) {
    FileInputStream fis;
    try {
    fis = new FileInputStream(“input.txt”);
    DataInputStream dis = new DataInputStream(fis);
    while (dis.available() != 0) {
    String line = dis.readLine(); // deprecated
    process(line);
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }

    // Process each line of the file, containing the tokens
    private static void process(String line) {

     String ip, nomearquivo, tamanho;
     ip = nomearquivo = tamanho = "";
     
     if(line.trim().startsWith("#")) // Ignore
     	return;
     	
     StringTokenizer tokenizer = new StringTokenizer(line, " ");
     
     if(tokenizer.countTokens() < 3) // We might always have three tokens, yeah?
     	return;
     
     int cont = 0;
     
     while(tokenizer.hasMoreTokens()) // While != EOL | EOF
     {
     	cont ++;
     	String token = tokenizer.nextToken(); // the next token of line
     	switch(cont)
     	{
     		case 1: // first
     			ip = token;
     			break;
     		case 2: // second
     			nomearquivo = token;
     			break;
     		case 3:
     			tamanho = token;
     			break;
     		default:
     			//throw new IllegalArgument ?
     			break;
     	} // switch
     } // while
     
     System.out.print("IP: " + ip);
     System.out.print( " " );
     System.out.print("NomeArquivo: " + nomearquivo);
     System.out.print( " " );
     System.out.print("Tamanho: " + tamanho );
     System.out.println(); // \n
    

    }
    }
    // EOF

[/code] :slight_smile:

tem como fazer pelo tokenizer mesmo como nosso amigo kinow aí disse, mas quando eu fiz o meu, eu jogava em um vetor multidimensional (matriz), o negocio é que o meu trabalho nao tinha os esquemas das arestas nao…

segue aí uma parte do código do meu trabalho de grafos…

[code]
try{
FileReader arquivo = new FileReader(new File(txt_nmarquivo.getText()));//cria um objeto para ler o arquivo
BufferedReader in = new BufferedReader(arquivo);//cria um objeto pra ler uma linha por vez

           string = in.readLine();//a variavel string recebe a primeira linha q contem a ordem
           n = Integer.parseInt(string);// n agora é a ordem da matriz
           matriz = new int[n][n];//inicializa a variavel matriz
                              
           for(i=0;i<n;i++){
               for(j=0; j<n; j++){
                   matriz[i][j] = 0; //zera todos os elementos da matriz                          
               }                       
           }                   
           	for(i=0;i<n;i++){
           		linha = in.readLine().split(" ");//cada vez q houver um espaço na linha lida, da um split
           		//e manda o elemento pra posiçao i do vetor linha
                for(j=0; j<n; j++){
                	matriz[i][j] = Integer.parseInt(linha[j]);//o elemento ij da matriz recebe o elemento j do vetor linha
                	aux3 += " " + matriz[i][j];//todas as "aux" sao para impressão
                }
                aux3 += "\n";
            }            
                  
            txa_matriztxt.setText("matriz do texto: \n" + aux3);	            
            
            D = matriz;//a matriz de distancia recebe a matriz lida
            P = new int[n][n];//inicializa a matriz de caminho                                     		
		
	        for(i=0;i<n;i++){
	            for(j=0;j<n;j++){
	                P[i][j]= 0;//zera todos os elementos da matriz de caminho
	            }
	        }
	        //aplica o algoritmo de floyd
	        for(k=0;k<n;k++){
	            for(i=0;i<n;i++){
	                for(j=0;j<n;j++){
	                    if((D[i][k]+ D[k][j])< D[i][j] || D[i][j] < 0){
	                        D[i][j]=(D[i][k]+D[k][j]);
	                        P[i][j]=(k+1);				                       
	                    }
	                }		                		                               
	            }		             
	        }
	        //joga o conteudo das matrizes para strings para depois setar como texto do textarea
           	for(i=0;i<n;i++){
                for(j=0;j<n;j++){
                	aux += " " + D[i][j];
	              	aux2 += " " + P[i][j];		              	
    				;		              	
	            }
	            aux += "\n";
	            aux2 +="\n";
	        }		        
	        txa_matrizdist.setText("Matriz das Distancias:\n" + aux);
            txa_matrizcaminho.setText("Matriz do menor Caminho: \n" + aux2);		        	              	
                   	        	
    	}[/code]

hehe, mas como que eu chamo este arquivo? Como que eu executo este código?

Como que eu tenho que salvar e tals…

desculpa a pergunta, mas é que eu não sei mesmo

Acabo de ver seu login aqui no GUJ, não sabia quem havia me adicionado no MSN hehehe. Ok, vamos lá, você tem que ler cara, não dá para explicar tudo, viraria um tutorial bem extenso pois teria que explicar sobre estrutura de pacotes, um pouco de Java básico, depois como compilar uma classe, sobre Classpath e como Java trata arquivos.

Se quiser podemos ir fazendo aos poucos no MSN, estou online todos os dias após a meia noite, até umas duas da matina.

Ou então, procure ler sobre como compilar e pacotes.

Depois coloque um arquivo chamado input.txt (ou altere na classe, ou crie um arquivo de configuração, ainda mais robusta a solução) e coloque no classpath da aplicação, daí ter que ler um pouco sobre classpath e como Java lida com arquivos.

Daí é só você rodar o programa e entender aos poucos como funciona.

Para você aprender de vez como o programa funciona, 100%, do início ao fim, só debugando.

Mais um tema importante a se ler.

Digo isso porque quando eu queria fazer tudo que sabia de C C++ em Java, tudo o que ouvi do especialista da empresa foi http://java.sun.com e leia hehehe.

Funcionou, mas estarei no MSN sempre que precisar para ir matando as dúvidas, ou por aqui, ou e-mail.

Como preferir.

Abraços, sorte.

Bruno Kinoshita. :slight_smile:

Uhm, bem eu vou conectar hj a noite, gostaria muito que vc me ajudasse mesmo. Se vc puder, conectarei o messenger a partir das 19 :wink:

Valeu amigo

ola

eu tenho de ler um ficheiro e imprimir

1 ; 96123456 ; John Smith ; Rua de Cima ; 253987654 ; hipertens?o
3 ; 96234567 ; Maria Fatima ; Rua de Baixo ; 253876543 ; hipotens?o
4 ; 96345678 ; Maria Luisa ; Avenida Central ; 253765432 ; RC alto
5 ; 96456789 ; Manuel Luis ; Pra?a Comercio ; 253654321 ; RC baixo

como posso imprimir em linhas separadas o que esta separado de “;”

tenho este codigo ate agora

comprimentos

[code]import java.io.*;

public class Dados{
public static void main(String[] args){
try {
BufferedReader in = new BufferedReader(new FileReader(“conteudo.txt”));
String str;
while((str = in.readLine()) != null)
{
if(str.startsWith("#"))
{
str= “”;
}
else{

System.out.println(str);
}
}
in.close();
}
catch (IOException e){
// possiveis erros são tratatos aqui
}

System.exit(0);
}
}[/code]

ola

eu tenho de ler um ficheiro e imprimir

1 ; 96123456 ; John Smith ; Rua de Cima ; 253987654 ; hipertens?o
3 ; 96234567 ; Maria Fatima ; Rua de Baixo ; 253876543 ; hipotens?o
4 ; 96345678 ; Maria Luisa ; Avenida Central ; 253765432 ; RC alto
5 ; 96456789 ; Manuel Luis ; Pra?a Comercio ; 253654321 ; RC baixo

como posso imprimir em linhas separadas o que esta separado de “;”

tenho este codigo ate agora

comprimentos

[code]import java.io.*;

public class Dados{
public static void main(String[] args){
try {
BufferedReader in = new BufferedReader(new FileReader(“conteudo.txt”));
String str;
while((str = in.readLine()) != null)
{
if(str.startsWith("#"))
{
str= “”;
}
else{

System.out.println(str);
}
}
in.close();
}
catch (IOException e){
// possiveis erros são tratatos aqui
}

System.exit(0);
}
}[/code]

ola

eu tenho de ler um ficheiro e imprimir

1 ; 96123456 ; John Smith ; Rua de Cima ; 253987654 ; hipertens?o
3 ; 96234567 ; Maria Fatima ; Rua de Baixo ; 253876543 ; hipotens?o
4 ; 96345678 ; Maria Luisa ; Avenida Central ; 253765432 ; RC alto
5 ; 96456789 ; Manuel Luis ; Pra?a Comercio ; 253654321 ; RC baixo

como posso imprimir em linhas separadas o que esta separado de “;”

tenho este codigo ate agora

comprimentos

[code]import java.io.*;

public class Dados{
public static void main(String[] args){
try {
BufferedReader in = new BufferedReader(new FileReader(“conteudo.txt”));
String str;
while((str = in.readLine()) != null)
{
if(str.startsWith("#"))
{
str= “”;
}
else{

System.out.println(str);
}
}
in.close();
}
catch (IOException e){
// possiveis erros são tratatos aqui
}

System.exit(0);
}
}[/code]

Pessoal, estou fazendo o clássico projeto do algoritmo de otimização da mochila em java…só que além de fazer a otimização, tenho que ler os dados em um arquivo e adicionar em um vetor, que no final do algoritmo, esses dados sairão em outro arquivo cujo nome será escolhido pelo usuário. Será que alguém poderia me ajudar? pode não ser complexo pra vocês, mas pra mim tá sendo bem trabalhoso e eu não avancei muita coisa kkk o projeto está em anexo…e de qualquer forma, obrigado !