Java导出TXT文件时将小数的点替换为逗号的实现方案
解决方法
针对你导出TXT时aaun_md_area列小数分隔符的问题,有两种实用方案:
方案1:字符串直接替换(快速上手)
直接把从数据库取出的字符串里的.替换成,就行,代码改动最小:
把原代码里的这一行:
fw.append(resultSigiop.getString("aaun_md_area"));
改成:
// 判空避免空指针 String areaStr = resultSigiop.getString("aaun_md_area"); fw.append(areaStr != null ? areaStr.replace(".", ",") : "");
这种方式适合确定字段值是标准数值格式(只有一个小数点)的场景,简单高效。
方案2:数值格式化(更严谨)
如果要避免字符串替换的潜在问题(比如字段值格式异常),可以先按数值类型取出,再用格式化工具指定逗号作为小数分隔符:
- 先导入需要的类:
import java.text.DecimalFormat; import java.text.DecimalFormatSymbols;
- 在代码开头初始化格式化工具(放在循环外,不要重复创建):
DecimalFormatSymbols symbols = new DecimalFormatSymbols(); symbols.setDecimalSeparator(','); // #.## 表示保留两位小数,可根据需求调整格式,比如#.####保留四位 DecimalFormat areaFormatter = new DecimalFormat("#.##", symbols);
- 修改取值逻辑:
// 替换原有的getString行 double areaValue = resultSigiop.getDouble("aaun_md_area"); if (!resultSigiop.wasNull()) { // 处理SQL NULL的情况 fw.append(areaFormatter.format(areaValue)); } else { fw.append(""); // 空值时输出空字符串,也可以换成你需要的占位符 }
额外优化提示
- 原代码里的
try-with-resources已经会自动关闭fw,不需要手动调用fw.close(),可以删掉这行代码。 - 循环里的
rts可以用clear()清空,不用每次重新创建新列表,更高效。
整理后的完整代码(用方案2):
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.ResultSet; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; // 其他业务代码... File arquivo = new File(path); // 初始化小数格式化工具 DecimalFormatSymbols symbols = new DecimalFormatSymbols(); symbols.setDecimalSeparator(','); DecimalFormat areaFormatter = new DecimalFormat("#.##", symbols); try (FileWriter fw = new FileWriter(arquivo)) { // 修复表头的分隔符和换行 fw.append("Width\tArea\n"); ArrayList<String> rts = new ArrayList<>(); for (int i = 0; i < listaRt.length; i++) { rts.add(listaRt[i]); ResultSet resultSigiop = stSigiop.executeQuery(sqlSigiop.replace(":1", rts.toString().replace("[", "").replace("]", ""))); while (resultSigiop.next()) { fw.append(resultSigiop.getString("ssrt_cd_status_subitem_rt")); fw.append('\t'); // 处理area列的小数分隔符 double areaValue = resultSigiop.getDouble("aaun_md_area"); if (!resultSigiop.wasNull()) { fw.append(areaFormatter.format(areaValue)); } else { fw.append(""); } fw.append('\n'); } fw.flush(); rts.clear(); // 清空列表复用 } } catch (IOException ex) { throw ex; }
内容的提问来源于stack exchange,提问作者AllPower
相关产品推荐
相关产品推荐

