通过使用文件重定向提供输入来运行Java程序

我正在尝试使用文件重定向运行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不是空文件,也没有输出。 我该怎么做才能使文件重定向工作?

在该表单中重定向只是用来自该文件的文件流替换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命令的一部分。 由于换行符或其他问题,可能无法按照您的方式工作。

输入由System.in捕获,而不是在程序启动时通过main(String [] args)方法传递的数据。

要从输入读取该数据,请将其作为InputStreamSystem.in读取或将其包装在Reader

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ... s.readLine() 

并确保不要关闭System.in或Reader,否则您也将关闭键盘输入到您的程序!