java - 使用 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) 解决它。
解决方案
您的实际问题可能来自您在命令行中嵌入的字符串包含双引号并且使引用混乱的事实(在 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)
推荐阅读
- git - 自动合并 package-lock.json
- html - 您如何在 bootstrap 4 按钮中垂直居中文本?
- android - Android - notifyItemRangeInserted() 未正确更新 RecyclerView 中的位置
- hibernate - Grails休眠会话打开/关闭和延迟初始化
- c# - 处理第一个 if-else 时如何防止代码运行 if 语句?
- algorithm - 如何编写一个考虑到 3 个加权动作并具有时间衰减的算法?
- javascript - ionic2 在存储中存储对象数组
- spring - Spring:库内配置中的bean注入
- c++ - 使用 jpeglib 从 file.jpg 读取原始压缩缓冲区
- php - PHP pdo试图插入mysql但没有成功