gpt4 book ai didi

java - 从 java 运行交互式 Dos 程序

转载 作者:行者123 更新时间:2023-12-01 15:36:22 24 4
gpt4 key购买 nike

我想从 Web 服务器运行 Dos 程序。 Dos 程序必须以交互方式运行,因为用户界面是通过一系列问题和答案来实现的。一个问题的答案将决定下一个问题。我必须在网络服务器上使用ajax,但我想我可以做到。

我在 Stackoverflow 上发现了一个 java 程序,它似乎做了与我想要的类似的事情。但是,当我编译程序时,出现错误,即。

javac PipeRedirection.java 
PipeRedirection.java:43: package InputProcess does not exist
InputProcess.Gobbler outGobbler = new InputProcess.Gobbler(p.getInputStream());

堆栈溢出问题 URL 为

How can I write large output to Process getOutputStream?

Java 文件是

/* 
####### PipeRedirection.java
*/

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class PipeRedirection {

public static void main(String[] args) throws FileNotFoundException {

if(args.length < 2) {
System.err.println("Need at least two arguments");
System.exit(1);
}

try {
String input = null;
for(int i = 0; i < args.length; i++) {

String[] commandList = args[i].split(" ");

ProcessBuilder pb = new ProcessBuilder(commandList);
//pb.redirectErrorStream(true);
Process p = pb.start();

if(input != null) {
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(p.getOutputStream())), true);
writer.println(input);
writer.flush();
writer.close();
}

InputProcess.Gobbler outGobbler = new InputProcess.Gobbler(p.getInputStream());
InputProcess.Gobbler errGobbler = new InputProcess.Gobbler(p.getErrorStream());
Thread outThread = new Thread(outGobbler);
Thread errThread = new Thread(errGobbler);
outThread.start();
errThread.start();

outThread.join();
errThread.join();

int exitVal = p.waitFor();
System.out.println("\n****************************");
System.out.println("Command: " + args[i]);
System.out.println("Exit Value = " + exitVal);
List<String> output = outGobbler.getOuput();
input = "";
for(String o: output) {
input += o;
}
}
System.out.println("Final Output:");
System.out.println(input);

} catch (IOException ioe) {
// TODO Auto-generated catch block
System.err.println(ioe.getLocalizedMessage());
ioe.printStackTrace();
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
System.err.println(ie.getLocalizedMessage());
ie.printStackTrace();
}

}


public static class Gobbler implements Runnable {
private BufferedReader reader;
private List<String> output;

public Gobbler(InputStream inputStream) {
this.reader = new BufferedReader(new InputStreamReader(inputStream));
}

public void run() {
String line;
this.output = new ArrayList<String>();
try {
while((line = this.reader.readLine()) != null) {
this.output.add(line + "\n");
}
this.reader.close();
}
catch (IOException e) {
// TODO
System.err.println("ERROR: " + e.getMessage());
}
}

public List<String> getOuput() {
return this.output;
}
}
}

有谁知道为什么我会收到编译错误?我可以用其他代码替换 InputProcess 吗?

感谢您的帮助

彼得

最佳答案

我认为很明显您遗漏了这段代码的某些部分。名为 InputProcess 的包其中有一个名为 Gobbler 的类没有包含在OP的帖子中。可能是因为这与他们的问题无关。

错误消息本质上是说它找不到它正在寻找的这个包/代码。

这个类到底做了什么,只有OP可以告诉你。但从最基本的角度来看,它似乎是从 InputStream 读取的。并将其转换为List<String> 。我会阅读 Java IO 并尝试复制类似的功能。

编辑:

看起来像Gobbler类确实包含在上面的示例中。删除InputProcess代码中的包名称(或将 Gobbler 类放入 InputProcess 包中),您应该可以开始了。

关于java - 从 java 运行交互式 Dos 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782947/

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