Converter tipo file para int[]

15 respostas
Erick_Ribeiro

Olá Galera. Como eu faço para converter um arquivo:

File arquivoOrigem = new File("/home/erick/Downloads/eee.txt");
para Int[] dadosDeEntrada;

?

15 Respostas

Anonner
Tem que dar um cast.

(Integer)BLABLABLA;

Ou:

Integer.ParseInt

Até mesmo:

(BLABLABLA).intValue();
Erick_Ribeiro

nao entendi. O que significa BLABLABLA???

Erick_Ribeiro

alguem me explica direito como converter? eu quero que os dados de um arquivo de texto .txt vao para um vetor.

Anonner

“BLABLABLA” seria a variável com a qual você quer dar cast.
Um exemplo de conversão explícita:

Animal animal = (Animal)new Dog();

Era do tipo “dog” porém ele converteu para ‘animal’ dando um cast.

ViniGodoy

Como está organizado esse arquivo?

Se for uma série de números, separadas por espaço ou quebra de linha, por exemplo:
12354 19821 1029012 1019293 1121092
12091 12929 12091 12929 12091 12929

Poderia ser assim:

File file = new File("eee.txt"); try (Scanner scan = new Scanner(file)) { List<Integer> numeros = new ArrayList<>(); while (scan.hasNextLine()) { String linha = scan.nextLine(); //Lê uma linha do arquivo String strNumeros[] = linha.split(" "); //Separa nos números entre espaços for (String strNumero : strNumero) { try { //Converte a String do número em inteiro e grava na lista numeros.add(Integer.parseInt(strNumero)); } catch (NumberFormatException e) { System.out.println("Não é um número:" + strNumero); } } } }

Erick_Ribeiro
Ainda está dando erro. Vejam:
public static void verDados() throws IOException
    {
        File arquivoOrigem = new File("/home/erick/Downloads/teste.txt");
        File arquivoDestino = new File("/home/erick/Downloads/lista_ordenada.txt");
        
        FileReader Entrada = new FileReader(arquivoOrigem);
        FileWriter Saida = new FileWriter(arquivoDestino);
        
        System.out.println(Entrada);
        ///////////
            File file = new File("eee.txt");
    try (Scanner scan = new Scanner(file))
    {
        List<Integer> numeros = new ArrayList<>();
        while (scan.hasNextLine())
        {
            String linha = scan.nextLine(); //Lê uma linha do arquivo
            String strNumeros[] = linha.split(" "); //Separa nos números entre espaços
            for (String strNumero : strNumero)
            {
                try
            {
                    //Converte a String do número em inteiro e grava na lista
                    numeros.add(Integer.parseInt(strNumero));
                } catch (NumberFormatException e)
                {
                    System.out.println("Não é um número:" + strNumero);
                }
            }
        }
        ///////////
    }
ViniGodoy

Desculpe, minha bola de cristal está no conserto.

Portanto, seria mais fácil se você disser:

  1. Qual erro;
  2. Em que linha.

Uma coisa, remova o FileReader e o FileWriter do seu código. Eles não são necessários.
O FileReader causa um problema adicional: O Scanner também lê o arquivo. Dessa forma, as duas classes não poderão ter o arquivo aberto ao mesmo tempo.

O ideal também é que seu método retorne um List e você faça um return em numeros no final.

Erick_Ribeiro

Está dando erro na linha numero 19. Aparece assim
imcompatible types.
Required: Java.Lang.String
Found: Java.Lang.Integer
: for (String strNumero : numeros)

E

Erick-kun, você poderia, por obséquio, pegar só um pedacinho do arquivo do arquivo .txt, e postá-lo aqui?

F

Erick Ribeiro:
Está dando erro na linha numero 19. Aparece assim
imcompatible types.
Required: Java.Lang.String
Found: Java.Lang.Integer
: for (String strNumero : numeros)

Puts aí lascou, se quiser que a galera resolva até isso, complica brother!

Erick_Ribeiro

O que eu faço entao Fábio? Eu estou tentando a mais de uma semana fazer algo muitro simples para o trabalho da faculdade mas nao estou conseguindo.

Eu tenho um arquivo de texto com alguns numeros e quero imprimi-los na tela.
E tambem quero passar esses dados para uma variável Array[]

Nao pensei que isso fosse tao dificil assim. Eu sou novato em java, estudo ha apenas 6 meses e ja me pediram 2 exercicios desses com arquivos externos, mas eu nao consigo nunca fazer.

F

Erick Ribeiro:
O que eu faço entao Fábio? Eu estou tentando a mais de uma semana fazer algo muitro simples para o trabalho da faculdade mas nao estou conseguindo.

Eu tenho um arquivo de texto com alguns numeros e quero imprimi-los na tela.
E tambem quero passar esses dados para uma variável Array[]

Nao pensei que isso fosse tao dificil assim. Eu sou novato em java, estudo ha apenas 6 meses e ja me pediram 2 exercicios desses com arquivos externos, mas eu nao consigo nunca fazer.


Ok, calma garoto e peço desculpas. O problema é aí no código é a incompatibilidade de objetos. Dentro do for não vai ser possível passar por cada interação de uma classe do tipo string para uma do tipo inteiros, entendeu :?:
A resolução está bem aí, tenta com calma vê-la

Erick_Ribeiro

Aqui está o coneudo do arquivo de texto:

8
7
2
1
4
3
9
6
5
0
E

Hum, é bem simples, na verdade. O seu único problema, eu acredito, é como converter um ArrayList para um int[].

Crie um método como este aqui:

public static int[] converteListaEmArray (List<Integer> lista) {
    int[] retorno = new int[lista.size()];
    for (int i = 0; i < lista.size(); ++i) {
        retorno[i] = lista.get(i);
    }
    return retorno;
}

A seguir, leia os números usando alguma coisa (por exemplo, um java.util.Scanner que encapsula um java.io.FileReader) e os insira em um ArrayList.
Depois de ter feito isso, você converte o ArrayList em um int[] usando o método converteListaEmArray (como eu digo pela ducentésima quinquagésima sétima vez, casts não funcionam para fazer essa conversão - casts não fazem conversões em Java, exceto de primitivos para primitivos. )

OK?

ViniGodoy

Já corrigi o código ali em cima. Você realmente não sabia como corrigi-lo? O conceito todo estava lá.
É bom tentar entender o que o povo posta no GUJ, ao invés de só copiar e colar cegamente. Muitos aqui não irão abrir a IDE e compilar uma versão funcional de programa para você.

Embora, se você tem um número por linha, não precisa do split. O código fica mais simples, veja:

private int[] lerDados() { try (Scanner scan = new Scanner(new File("eee.txt"))) { List&lt;Integer&gt; numeros = new ArrayList&lt;&gt;(); while (scan.hasNextLine()) { String linha = scan.nextLine().trim(); //Lê uma linha do arquivo try { //Converte a String do número em inteiro e grava na lista numeros.add(Integer.parseInt(linha)); } catch (NumberFormatException e) { System.out.println(&quot;Não é um número:&quot; + strNumero); } } } return converteListaEmArray(numeros); //Método do entanglement }

Criado 6 de maio de 2012
Ultima resposta 17 de mai. de 2012
Respostas 15
Participantes 5