我正在尝试读取一个文本文件,其中包含用逗号分隔的数字。该文件很大,最多可以包含数千个数字。我需要将这些数字添加到列表中
List<Integer> listIntegers = new ArrayList<Integer>();
什么是最好的方法?我目前正在这样读取文件;
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("D:\\generated30-1.cav"));
String line = null;
while ((line = br.readLine()) != null)
{
sb.append(line.replaceAll(",",""));
if (sb.length() > 0)
{
sb.append("\n");
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (br != null)
{
br.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
String contents = sb.toString();
答案 0 :(得分:2)
如果数字之间用逗号分隔,则应该不删除逗号。我会使用Scanner
。我将使用try-with-resources
而不是显式的close()
。然后,我会split
上的每一行都用逗号(\\s*
全局空格)。喜欢,
List<Integer> listIntegers = new ArrayList<>();
File f = new File("D:\\generated30-1.cav");
try (Scanner sc = new Scanner(f)) {
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] tokens = line.split("\\s*,\\s*");
for (String token : tokens) {
listIntegers.add(Integer.parseInt(token));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return listIntegers;
答案 1 :(得分:2)
由于输入文件的逗号后面不包含空格,因此您不应替换逗号(就像您有多个数字一样),因此无法区分数字的开头和结尾。而是只需附加line
:
sb.append(line);
然后您可以这样做:
List<Integer> list = Arrays.stream(contents.split(","))
.map(Integer::valueOf)
.collect(toList());
这将从Array
创建的split
创建流,然后将它们映射到int,然后将它们收集到List
答案 2 :(得分:1)
从JDK8开始,我肯定会尝试利用Files.lines
:
List<Integer> result;
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.map(s -> /* perform your mapping operation here */)
.collect(Collectors.toList());
} catch (IOException e) { e.printStackTrace(); }
阅读: