如何用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
相关产品推荐
相关产品推荐

