我有这段代码从文本文件中读取数字(类型为double)到列表。
ArrayList listTest = new ArrayList();
try {
FileInputStream fis = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(fis, "UTF-16");
int c;
while ((c = isr.read()) != -1) {
listTest.add((char) c);
}
System.out.println();
isr.close();
} catch (IOException e) {
System.out.println("There is IOException!");
}
但是,输出结果如下:
1
1
.
1
4
7
4
2
.
8
1
7
3
5
而不是
11.147
42.81735
如何逐行添加号码列表?
答案 0 :(得分:2)
正如你所说它们是双打的,这会将它们转换为双打并将它们添加到双打列表中。这样做的好处是不会在列表中添加任何无法解析为double的内容,从而进行一些数据验证。
List<Double> listTest = new ArrayList<Double>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-16"))) {
String line;
while ((line = br.readLine()) != null) {
try {
listTest.add(Double.parseDouble(line));
} catch (NumberFormatException nfe) {
// Not a double!
}
}
System.out.println();
} catch (IOException e) {
System.out.println("There is IOException!");
}
答案 1 :(得分:1)
您可以将InputStreamReader
打包在BufferedReader
方法中readLine()
:
List<String> listTest = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-16"))) {
String line;
while ((line = br.readLine()) != null) {
listTest.add(line);
}
System.out.println(listTest);
} catch (IOException e) {
System.out.println("There is IOException!");
}
另外,请注意自动关闭流的try-with-resources
语句(如果使用的是JDK1.6或更低版本,请在close()
块中调用finally
方法。在示例代码中,如果存在异常,则流不会关闭。
答案 2 :(得分:0)
在你的代码中,你通过char读取输入char,这就是你看到这样一个输出的原因。您可以使用for (var key in arena) {
console.log(key + " -> " + arena[key][0]);
}
以更干净的方式阅读输入文件,而无需考虑流阅读器等。
Scanner