我有一个充满数字的文本文件,我想将这些数字读入Java,然后创建一个我可以排序的列表。自从我使用java以来已经有一段时间了,我忘记了如何做到这一点。
文本文件看起来像这样
4.5234
9.3564
1.2342
4.4674
9.6545
6.7856
答案 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)
没有代码的简短说明:
BufferedReader
以从您的文件中读取。reader.readLine()
逐行迭代文件读取,直到readLine()
返回null
(==文件结尾)Float
或Double
(例如Float.valueOf(line)
或Double.valueOf(line)
Float
或Double
个对象添加到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;
}