从java中的文本文件中列出一个列表?

时间:2010-10-04 08:24:16

标签: java list text-files

我有一个充满数字的文本文件,我想将这些数字读入Java,然后创建一个我可以排序的列表。自从我使用java以来​​已经有一段时间了,我忘记了如何做到这一点。

文本文件看起来像这样

4.5234  
9.3564
1.2342
4.4674
9.6545
6.7856

6 个答案:

答案 0 :(得分:10)

您可以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);

资源:

答案 1 :(得分:3)

你做的就是这样。

编辑:我已经尝试在他的评论中实现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 :(得分:2)

如果您使用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);
            }
        });

这是使用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));
}

答案 3 :(得分:1)

没有代码的简短说明:

  1. 创建BufferedReader以从您的文件中读取。
  2. 使用reader.readLine()逐行迭代文件读取,直到readLine()返回null(==文件结尾)
  3. 将每一行解析为FloatDouble(例如Float.valueOf(line)Double.valueOf(line)
  4. 将您的FloatDouble个对象添加到ArrayList

答案 4 :(得分:1)

不考虑您需要根据您的环境代码设置异常处理这一事实,它看起来像这样:

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

答案 5 :(得分:1)

使用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;
}