首页 > 解决方案 > 使用 ProcessBuilder 输出到文件的 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。

我尝试了使用不同变量作为 requestBodyString 的相同命令,它工作正常,这让我相信该字符串有问题,但我就是不知道是什么。

编辑:使用 File(fileName).writeText(fileContent) 解决它。

标签: javabashkotlincommand

解决方案


您的实际问题可能来自您在命令行中嵌入的字符串包含双引号并且使引用混乱的事实(在 Windows 命令行上的引用也是一团糟)。

话虽如此,这看起来像是一种将文本写入文件的非常复杂的方式......正如@VGR 所写的那样,您最好只使用常规 API 来写入 Java 中的文件。

例如使用 Kotlin 1.5 的Path.writeText

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

Path("message.txt").writeText(requestStringBody)

或使用旧版本:

File("message.txt").writeText(requestStringBody)

推荐阅读