我正在尝试从包含100,000个双打的文件中读取双打,这些文件以两个双打的行排列,每个双打由一个空格隔开。像这样:
2.54343 5.67478
1.23414 5.43245
7.64748 4.25536
...
到目前为止我的代码:
Scanner numFile = new Scanner(new File("input100K.txt").getAbsolutePath());
ArrayList<Double> list = new ArrayList<Double>();
while (numFile.hasNextLine()) {
String line = numFile.nextLine();
Scanner sc = new Scanner(line);
sc.useDelimiter(" ");
while(sc.hasNextDouble()) {
list.add(sc.nextDouble());
}
sc.close();
}
numFile.close();
System.out.println(list);
}
此代码运行后,它会打印到控制台并清空ArrayList []
,我无法弄清楚原因。
从文件中删除getAbsolutePath()
会给我这一行:
Scanner numFile = new Scanner(new File("input100K.txt"));
但是当我运行程序时,它给了我一个FileNotFoundException。我知道文件存在,我可以看到并打开它。
input100K.txt
与程序一起位于src包文件夹中。有什么特定的文件必须在哪里工作?
编辑:正如 Evgeniy Dorofeev 指出的那样,该文件需要位于项目文件夹(src文件夹的父文件夹)中,以便程序找到它。
答案 0 :(得分:4)
当你创建像这样new Scanner(new File("input100K.txt").getAbsolutePath())
的扫描仪时;您正在扫描文件路径作为输入而不是文件本身。这样做new Scanner(new File("input100K.txt"));
答案 1 :(得分:0)
您可以尝试在刚刚阅读的行上使用split()
方法,然后将每个部分解析为double
。请注意,没有必要创建两个Scanner
s:
Scanner sc = new Scanner(new File("input100K.txt"));
sc.useDelimiter(" ");
ArrayList<Double> list = new ArrayList<Double>();
while (sc.hasNextLine()) {
String[] parts = sc.nextLine().split(" "); // split each line by " "
for (String s : parts) {
list.add(Double.parseDouble(s)); // parse to double
}
}
sc.close();
System.out.println(list);
答案 2 :(得分:0)
替换
行Scanner numFile = new Scanner(new File("input100K.txt").getAbsolutePath());
与
Scanner numFile = new Scanner(new File("input100K.txt"));
答案 3 :(得分:0)
以下是一个示例程序:
public static void main(String[] args) throws FileNotFoundException {
List<Double> doubleList = new ArrayList<Double>();
Scanner scanner = new Scanner(new File("/home/visruthcv/inputfile.txt"));
while (scanner.hasNextDouble()) {
double value = scanner.nextDouble();
System.out.println(value);
doubleList.add(value);
}
/*
* for test print
*/
for (Double eachValue : doubleList) {
System.out.println(eachValue);
}
}