сделать список из текстового файла в Java? - PullRequest
11 голосов
/ 04 октября 2010

У меня есть текстовый файл, полный цифр, и я хочу прочитать числа в Java, а затем составить список, который я могу отсортировать.Прошло много времени с тех пор, как я использовал Java, и я забыл, как это сделать.

текстовый файл выглядит примерно так

4.5234  
9.3564
1.2342
4.4674
9.6545
6.7856

Ответы [ 6 ]

10 голосов
/ 04 октября 2010

Вы можете использовать Scanner для File и метод nextDouble() или nextFloat().

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

Ресурсы:

3 голосов
/ 04 октября 2010

Вы делаете что-то вроде этого.

РЕДАКТИРОВАТЬ: я пытался реализовать изменения dbkk, упомянутые в его комментариях, так что код на самом деле будет правильным. Скажи мне, если я что-то не так.

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);
    }

}
2 голосов
/ 04 октября 2010

Это действительно весело и просто, если вы используете Гуава :

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);
            }
        });

А вот аналогичная версия с использованием 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 голос
/ 04 октября 2010

Использование 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;
}
1 голос
/ 04 октября 2010

Не принимая во внимание тот факт, что вам нужно настроить обработку исключений и тому подобное на основе вашего окружающего кода, это будет выглядеть примерно так:

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));
}
1 голос
/ 04 октября 2010

Краткие инструкции без кода:

  1. Создайте BufferedReader для чтения из вашего файла.
  2. Перебирать все чтение файла построчно с reader.readLine(), пока readLine() не вернет null (== конец файла)
  3. Анализировать каждую строку как Float или Double (например, Float.valueOf(line) или Double.valueOf(line)
  4. Добавьте ваши Float или Double объекты к ArrayList.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...