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

Windows环境下使用ProcessBuilder调用git-bash写入文件失败求助

问题场景

我编写了如下代码,尝试通过ProcessBuilder将指定文本写入文件:

val requestStringBody = "{\"transfers\": [{\"amount\": 100, \"name\": \"Steve Rogers\", \"taxId\": \"330.731.970-10\",\"bankCode\": \"001\",\"branchCode\": \"1234\",\"accountNumber\": \"123456-0\"}]}"  

ProcessBuilder("cmd", "/c", ".\\git-bash.lnk", "-c", "echo -n \"$requestStringBody\" >> message.txt")
        .directory(File("My Path"))
        .start()
        .waitFor()

由于Windows系统相关问题,我使用了git-bash.lnk来执行命令。
我将requestStringBody替换为其他变量时命令可以正常运行,因此判断是该字符串存在问题,但始终无法定位具体原因。

问题原因

报错本质是多层命令转义冲突:

  • 你的JSON字符串本身包含大量双引号,拼接进ProcessBuilder的命令参数后,首先会经过Windows cmd的一层转义解析,原本属于JSON内容的双引号会被cmd识别为命令参数的边界,导致传给git bash的命令内容提前被截断、格式错乱
  • 即使逃过cmd解析的内容,进入git bash后还要经过shell的二次解析,JSON里的特殊符号会被进一步错误转义,最终要么命令执行失败,要么写入文件的内容和预期不符
解决方案

你最终使用的File(fileName).writeText(fileContent)是最优方案:

  • 直接通过JDK的文件IO接口写入内容,完全绕开了shell命令的多层转义逻辑,没有格式错乱风险
  • 相比启动额外进程执行写入的方式,IO直接写入的性能、可靠性都高很多,也不需要依赖git bash这类外部环境

更新:我最终通过File(fileName).writeText(fileContent)方法解决了该问题。


内容的提问来源于stack exchange,提问作者Felipe Tomao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:42:03