我无法读取.txt中的所有数字

时间:2019-10-17 01:17:32

标签: java bufferedreader filereader

我正在尝试平均一个包含1000万个数字的文件,每行只有一个数字。我创建了一个名为getAverage()的方法,该方法返回一个double。这是代码:

public double promedioDouble() throws IOException
    {
        double adder = 0;
        int counter = 0;
        try{
                file = new FileReader(filePath);
                reader = new BufferedReader(file);
                while(reader.readLine()!=null)
                {
                    adder+=Double.parseDouble(reader.readLine());
                    counter++;
                }

            }
        catch (IOException e) 
        {
              System.out.println("cant read");
        }
        finally {
            if (file != null) file.close();
        }             
        return adder/counter;
    }

我打印了计数器,结果显示5.000.000,我不知道为什么读者无法读取文件中包含的1000万个数字,而它只能读取一半。我需要帮助。

2 个答案:

答案 0 :(得分:6)

您要拨打readLine两次-并忽略在while条件内返回的行。

尝试:

            String line;
            while( (line = reader.readLine()) !=null)
            {
                adder+=Double.parseDouble(line);
                counter++;
            }

您还可以使用Streams(和try-with-resources-避免使用finally):

    try (Stream<String> stream = Files.lines(Paths.get(fileName))) 
    {
        stream.forEach(s -> {adder+=Double.parseDouble(s); counter++;});

    } catch (IOException e) {
        e.printStackTrace();
    }

答案 1 :(得分:2)

我的回答离您的问题有点远。如果您使用的是Java 8,可以在下面快速执行以下操作:

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {

        return stream.mapToDouble(Double::parseDouble)
                .average()
                .getAsDouble();

    } catch (IOException e) {
        e.printStackTrace();
}