You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BufferedWriter写入double类型数据?写入异常求助

问题原因与解决方法

写入结果异常的核心原因

你调用的BufferedWriter.write(int c)方法,作用是写入对应Unicode码点的字符,而非将整数转为数字字符串输出。比如把123.45强转成int得到123,执行write(123)实际写入的是ASCII码123对应的字符{,不是你预期的数字字符串123,这就是输出异常的根源。

file.nextInt()读取失败的原因

你的CSV文件里是带小数的double类型数值,nextInt()只能匹配纯整数格式的输入,遇到带小数点的内容就会抛出InputMismatchException,自然无法正常读取。

修正后的代码

方式1:用BufferedWriter写入字符串

把读取到的double转为字符串后写入,同时保留CSV的逗号分隔格式:

try{
    Scanner file = new Scanner(new File("/home/amit/Desktop/number.csv"));
    file.useDelimiter(", *");
    BufferedWriter writer = new BufferedWriter(new FileWriter("/home/amit/Desktop/output_number.csv"));
    boolean isFirst = true;
    while(file.hasNextDouble()){
        double num = file.nextDouble();
        if (!isFirst) {
            writer.write(","); // 添加分隔符
        }
        writer.write(String.valueOf(num)); // 转成字符串写入
        isFirst = false;
    }
    writer.flush();
    writer.close();
    file.close(); // 关闭Scanner释放资源
}catch(Exception x){
    x.printStackTrace();
}

方式2:用PrintWriter简化操作

PrintWriter封装了更易用的输出方法,直接支持打印各种数据类型,无需手动转字符串:

try{
    Scanner file = new Scanner(new File("/home/amit/Desktop/number.csv"));
    file.useDelimiter(", *");
    PrintWriter writer = new PrintWriter(new FileWriter("/home/amit/Desktop/output_number.csv"));
    boolean isFirst = true;
    while(file.hasNextDouble()){
        double num = file.nextDouble();
        if (!isFirst) {
            writer.print(",");
        }
        writer.print(num);
        isFirst = false;
    }
    writer.close();
    file.close();
}catch(Exception x){
    x.printStackTrace();
}

额外提示

如果需要控制输出的小数位数,可以用String.format("%.2f", num)替换String.valueOf(num),比如%.2f表示保留两位小数。

内容的提问来源于stack exchange,提问作者Amit Sur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:40:31