import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileOutputStream;
import java.io.InputStream;
public class RunInput {
public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec("java Island < island1.in");
p.waitFor();
InputStream in = p.getInputStream();
int b;
while ((b = in.read()) != -1) {
outputStream.write(b);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我无法弄清楚为什么我的程序似乎没有运行命令行并将其保存到output1.txt。有人能告诉我这样做的正确方法是什么?
答案 0 :(得分:0)
我认为有两件事缺失:
例如,假设类路径是当前目录:
String[] commands = { "java", "-cp", ".", "Island", "< island1.in" };
Process p = Runtime.getRuntime().exec(commands);
答案 1 :(得分:0)
Runtime.exec
不会在shell中执行给定的命令,因此通过<
和>
的重定向将无法正常工作。相反,它们将作为附加参数传递给执行的命令。请改用Process
返回的exec
对象的getOutputStream
和getInputStream
方法。
不要被名称混淆:getOutputStream
返回子进程的标准输入流(类型为java.io.OutputStream
),而getInputStream
返回子进程的标准输出流(类型为java.io.InputStream
)。我认为这些方法更好地命名为getStandardInput
,getStandardOutput
和getStandardError
。
答案 2 :(得分:0)
您可以在不使用以下代码调用单独的Java VM的情况下执行此操作:
System.setIn(new FileInputStream("island1.in"));
System.setOut(new FileOutputStream("output1.txt"));
new Island().main(new String[0]);
这会将“stdin”和“stdout”替换为您的文件,然后调用Island
类的主要部分。