正在读取文件到列表<整数>

时间:2018-12-06 01:11:15

标签: java arrays int

我正在尝试读取一个文本文件,其中包含用逗号分隔的数字。该文件很大,最多可以包含数千个数字。我需要将这些数字添加到列表中

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

3 个答案:

答案 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(); }

阅读: