2010-10-04 14 views
11

Tengo un archivo de texto lleno de números y quiero leer los números en Java y luego hacer una lista que pueda ordenar. Ha pasado un tiempo desde que utilicé Java y me olvido de cómo hacerlo.hacer una lista de un archivo de texto en java?

archivo de texto se ve algo como esto

4.5234 
9.3564 
1.2342 
4.4674 
9.6545 
6.7856 
+0

Por "hacer una lista de ellos", Qué quiere decir una estructura de datos de lista o una lista en un columpio o ¿UI web? –

+1

@Michael Borgwardt usted sabe demasiado :) – ant

Respuesta

3

Haga algo como esto.

EDIT: He intentado implementar los cambios dbkk mencionados en sus comentarios para que el código sea correcto. Dime si tengo algo mal.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class ReadList { 

    public static void main(String[] args) throws IOException { 

     BufferedReader in = null; 
     FileReader fr = null; 
     List<Double> list = new ArrayList<Double>(); 

     try { 
      fr = new FileReader("list.txt"); 
      in = new BufferedReader(fr); 
      String str; 
      while ((str = in.readLine()) != null) { 
       list.add(Double.parseDouble(str)); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      in.close(); 
      fr.close(); 
     } 

     for (double d : list) System.out.println(d); 
    } 

} 
+0

Ouch. No solo es largo y feo, sino que también se olvida de cerrar el archivo. – dbkk

+0

@dbkk: Deberías prestar atención cuando canceles votos por tales cosas, ya que A) estoy cerrando el archivo ...después del primer bloque while y B) es solo largo porque soy uno de los únicos aquí que ha rodeado las partes necesarias con un bloque try-catch y también he escrito una parte de salida para que realmente pueda ver lo que está pasando, incluso comentó que es para fines de demostración ... –

+5

El flujo de entrada realmente debe cerrarse en un 'finalmente {}' –

1

Instrucciones breves sin código:

  1. Crear una BufferedReader para leer desde el archivo.
  2. Iterar por toda la línea de lectura de archivos por línea con reader.readLine(), hasta que vuelve readLine()null (== final del fichero)
  3. Analizar cada línea como un Float o Double (por ejemplo Float.valueOf(line) o Double.valueOf(line)
  4. Haz tu Float o Double objetos a un ArrayList.
1

Sin tener en cuenta el hecho de que es necesario el manejo de excepciones y configuración tales basado en el código de sourrounding, parecerá algo como esto:

BufferedReader br = new BufferedReader(new FileReader(new File("filename.txt"))); 
ArrayList<Double> ald = new ArrayList<Double>(); 
String line; 
while(true) 
{ 
    line = br.readLine(); 
    if(line == null) break; 
    ald.add(new Double(line)); 
} 
10

Puede utilizar un Scanner en un File y utilizar el método nextDouble() o nextFloat().

Scanner scanner = new Scanner(new File("pathToYourFile")); 
List<Double> doubles = new ArrayList<Double>(); 
while(scanner.hasNextDouble()){ 
    doubles.add(scanner.nextDouble()); 
} 
Collections.sort(doubles); 

Recursos:

+0

Para ser muy pedante: el OP pidió una lista, no una colección :-P – DerMike

+2

@DerMike, tienes razón;) Es una lista al final, pero una colección no se puede ordenar, voy a editar el código. –

2

Esto es muy divertido y sencillo si se utiliza Guava:

final File f = new File("your/file.txt"); 
final List<Float> listOfFloats = 
    Lists.transform(Files.readLines(f, Charset.defaultCharset()), 
     new Function<String, Float>(){ 

      @Override 
      public Float apply(final String from){ 
       return Float.valueOf(from); 
      } 
     }); 

Y aquí es una versión similar usando Apache Commons/IO:

final File f = new File("your/file.txt"); 
final List<String> lines = FileUtils.readLines(f); 
final List<Float> listOfFloats = new ArrayList<Float>(lines.size()); 
for(final String line : lines){ 
    listOfFloats.add(Float.valueOf(line)); 
} 
1

Uso java.util.Scanner:

public List<Doubles> getNumbers(String fileName) { 
    List<Double> numbers = new ArrayList<Double>(); 
    Scanner sc = new Scanner(new File(fileName)); 

    while (sc.hasNextDouble()) { 
     numbers.add(sc.nextDouble()); 
    } 

    return numbers; 
} 
Cuestiones relacionadas