我正在尝试使用文件重定向运行Java程序。我正在用这个简单的程序测试它:
package netbeans.sanbdox;
public class Sanbdox {
public static void main(String[] args) {
for(int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
当我转到命令行并运行
时$ java -jar dist/compiled_project.jar < q1.txt
$
即使q1.txt
不是空文件,也没有输出。我该怎么做才能使文件重定向工作?
答案 0 :(得分:5)
在该表单中重定向只是用来自该文件的文件流替换stdin
。您的代码不会使用stdin
作为任何内容,因此您不会有任何输出,因为您没有将任何命令行参数传递给程序。
要了解您的期望,您必须使用Scanner
:
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close(); // Not required for stdin but good practice
如果您真正想要的是将文件中的每个标记作为命令行参数提供,您可以在shell中执行以下操作:
$ java -jar dist/compiled_project.jar $(cat q1.txt)
这将输出q1.txt
的内容作为shell命令的一部分。由于换行符或其他问题,可能无法按照您想要的方式运行。
答案 1 :(得分:2)
输入由System.in
捕获,而不是在程序启动时通过main(String [] args)方法传递的数据。
要从输入中读取该数据,请将其从System.in
作为InputStream
读取,或将其包装在Reader
中:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
... s.readLine()
并确保不要关闭System.in或Reader,否则您也会关闭键盘输入到您的程序!