Problema : ler inteiro de .txt

5 respostas
A

Boas,
Eu queria criar um programa que lê-se dois inteiros de um ficheiro .txt porem estou com algumas dificuldades e muitas duvidas à mistura vou vos mostrar o que já fiz:

import java.io.BufferedReader;
import java.io.IOException;

public class Lerint {
	int lerprimeiroint;
	int lersegundoint;
	String input;

	public Lerint(BufferedReader in) throws IOException {

		input = in.readLine();

		lerprimeiroint = Integer.parseInt(input.nextInt());
		lersegundoint = Integer.parseInt(input.nextInt());
	}
}

Penso que haja qualquer confusão no nextInt eu suponho que não se possa fazer essa utilização contudo não estou a ver outra forma que vá buscar os inteiros. Exemplo, suponhamos que no ficheiro .txt estaria : 34 6 , na variável lerprimeiroint eu pretendia que fica-se o 34 e na variável lersegundoint eu pretendia que ficasse assim o 6 .

5 Respostas

ViniGodoy

Nesse caso, você também terá que acrescentar o espaço como um dos caracteres do seu Scanner.

Ou então, fazer um split no espaço na linha lida.

ribclauport
Boas, Eu queria criar um programa que lê-se dois inteiros de um ficheiro .txt porem estou com algumas dificuldades e muitas duvidas à mistura vou vos mostrar o que já fiz:

Realmente eu não entendi para que ler somente a primeira linha de um ficheiro?
Acredito que seria algo como abaixo, o codigo abaixo cria um txt, depoisi grava duas linhas com dois numeros, depois o arquivo é passado para a classe, a mesma
le a primeira linha, e escreve os dois numeros na saida padrão, é so salvar e rodar o progama:

package diversos;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

class LerInt {

	int lerprimeiroint;
	int lersegundoint;
	String input;

	public LerInt(BufferedReader in) throws IOException {

		input = in.readLine();

		String[] numeros = input.split(" ");

		lerprimeiroint = Integer.valueOf(numeros[0]);
		lersegundoint = Integer.valueOf(numeros[1]);
	}
}

public class TestLerInt {
	public static void main(String[] args) throws IOException {
		PrintWriter pw = new PrintWriter("text.txt");
		pw.println("34 6");
		pw.println("563 890");
		pw.flush();

		FileReader fReader = new FileReader("text.txt");

		LerInt lerInt = new LerInt(new BufferedReader(fReader));
		System.out.println(lerInt.lerprimeiroint);
		System.out.println(lerInt.lersegundoint);

	}
}
Espero ter ajudado.
A

Muito obrigado pela sua explicaçao ribclauport, fiquei um pouco na duvida no que faz o seguinte codigo :

import java.io.BufferedReader;  
import java.io.FileReader;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
class LerInt {  
  
    int lerprimeiroint;  
    int lersegundoint;  
    String input;  
  
    public LerInt(BufferedReader in) throws IOException {  
  
        input = in.readLine();  
  
        String[] numeros = input.split(" ");  
  
        lerprimeiroint = Integer.valueOf(numeros[0]);  
        lersegundoint = Integer.valueOf(numeros[1]);  
    }  
}

A minha duvida é a seguinte, quando nos usamos a string [] numeros estamos a converter os dois inteiros do ficheiro txt para strings correto? O comando split vai apanhar cada numero, ou seja cada string que esteja separada por um espaço e guarda-a assim num array, penso que até aqui estou a dizer tudo correto.
Quando utilizamos o Integer.valueOf(numeros[0]) estamos a passar o que ficou na posição 0 do array, ou seja passa neste caso o 36, para a variavel lerprimeiroint já como um inteiro, e o mesmo acontece para o lersegundoint, passando o que esta na posiçao 1 do array numeros.
A minha duvida é mesmo saber se a minha interpretação está correta.

ribclauport

O método valueOF(), retorna um objeto wrapper recém-criado do tipo que chamou o método, na realidade ali o java está fazendo um auto unboxing…, mas isso não vem ao caso, poderia ser usado também o método ParseXxx(), o qual retorna um tipo primitivo nomeado…

Mas de qualquer forma a idéia é realmente essa, “pegar” a string do array gerado pelo método split() e manipular da forma que desejares…

Bem, so para constar abaixo uma outra alternativa, desta vez usando o método ParseXxx(), e também usando o construtor sobrecarregado
que recebe uma string para criar um Integer.

lerprimeiroint = Integer.parseInt(numeros[0]); lersegundoint = Integer.parseInt(numeros[1]); lerprimeiroint = new Integer(numeros[0]); //unboxing automático lersegundoint = new Integer(numeros[1]);//unboxing automático lerprimeiroint = new Integer(numeros[0]).intValue(); //unboxing explícito lersegundoint = new Integer(numeros[1]).intValue();//unboxing explicíto

Espero ter ajudado.

A

Muito obrigado pelas dicas

Criado 11 de março de 2012
Ultima resposta 11 de mar. de 2012
Respostas 5
Participantes 3