%fi-6ren">
gpt4 book ai didi

java - 写几行批处理

转载 作者:行者123 更新时间:2023-12-01 13:09:31 24 4
gpt4 key购买 nike

我正在尝试为简单的批处理文件提供输入,该文件需要两行输入:

@echo off

set /p file1="Enter: "
set /p file2="Enter: "
echo "1" > %file2%

我的代码是:

public static void main(String[] args) throws Exception {
Process p = new ProcessBuilder("cmd.exe", "/c", "test.cmd").start();

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()))) {
bw.write("1");
bw.newLine();
bw.write("2");
bw.newLine();
}
}

我预计将创建名为“2”的文件,但什么也没有发生。

这段代码有什么问题?

最佳答案

试试这个。

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
InputStream in = p.getInputStream()) {
in.read();
bw.write("1");
bw.newLine();
bw.flush();
bw.write("2");
bw.newLine();
bw.flush();
}

基本上,你必须在写作之前阅读内容。否则,Java 甚至可能在子进程提示输入之前就开始写入。所以你的写法不会考虑。

别忘了冲水

您可以使用waitFor进行调试,而无需读取。它将永远等待获取输入。

注意**,文件位置基于第二行中的输入。在您的情况下,它将在执行 java 的目录中创建。

相反,您可以尝试实际的路径,例如。

bw.write("C:/projects/test.txt");

将根据 cmd 中的命令在指定路径中创建

更新 我想我确实解释了为什么我们需要先调用 read 。让我尝试用我理解的方式详细解释一下。

通过调用process.getRunTime().exec - 您正在创建可以并行运行的新进程。您的主进程将立即开始进程。所以我们有两个进程(1.我们启动的主进程2.)都是并行运行的。假设主进程在子进程(cmd)提示之前执行下一行(写入)(因为两者是并行的。这可能会发生)。主进程在子进程上写入的内容都是浪费,因为子进程不处于监听模式。

这就是为什么我们从主进程中调用读取子进程的原因。这样主进程就会等待子进程提示输入。

关于java - 写几行批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22994023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com