【发布时间】:2019-08-08 18:47:07
【问题描述】:
我需要在我的 java 应用程序中执行 .bat 文件。假设我有一个包含此示例内容的文本文件:
{
"id": 12,
"name": "test"
}
在我的.bat 文件中,我有一个用于输出文本文件内容的命令。所以这是我的.bat 文件内容:
#some other commands
more path\to\file.txt
最后,这是我用于执行 .bat 文件的 java 代码:
Process process = Runtime.getRuntime().exec("path\to\file.bat");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
List<String> outputs = new ArrayList<>();
while ((line = reader.readLine()) != null) {
outputs.add(line);
}
执行此代码后,outputs 列表有如下数据:
[...,
"{",
" "id": 12",",
" "name": "test",",
"}"
]
我的意思是,这会逐行返回输出。但是我希望将整个命令输出作为我列表的一个索引。换句话说,我希望逐个命令而不是逐行输出(每个命令只有一个输出)。
有可能做这样的事情吗?
编辑:我也尝试使用ProcessBuilder,但结果是一样的。
【问题讨论】:
-
您想访问 key(在本例中为命令)并作为回报获得 值,对吗?
-
是的,像这样。如果我能得到一张带有命令和结果的地图,那就太好了。但是,没有 key 也可以,只是有一个完整的(不是逐行)结果对我也有好处。
-
不要在批处理文件中使用
more path\to\file.txt,而是使用type "path\to\file.txt"或使用Java 代码读取文本文件。如果您想知道命令type和more之间的区别,请打开command prompt,运行type /?,阅读输出帮助(非常短)和more /?,然后再阅读输出简短帮助。跨度> -
我想,您在XY problem 上寻求帮助。所以我建议退一步思考如何在不使用批处理文件的情况下解决任务并捕获其输出。好吧,您可以在写入
stdout的每个命令之间在批处理文件中插入一行echo NewCmd,并在Java 程序中将两个"NewCmd"字符串之间的所有内容连接到一个带有\n或\r\n的字符串,然后再将其添加到字符串数组outputs当然丢弃字符串"NewCmd"。但我 100% 确定,整个任务都有更好的解决方案。 -
我同意@Mofi,这绝对是XY problem 的一个实例。请说明您要解决的情况和问题,而不是您认为应该如何解决的问题。例如,首先存在的是批处理文件还是 Java 程序?批处理文件中的“其他命令”做什么?为什么需要将一个批处理文件的输出拆分成块?你会从中得到什么好处?
标签: java batch-file runtime