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

时间:2013-10-31 03:24:21

标签: java command-line

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

2 个答案:

答案 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,否则您也会关闭键盘输入到您的程序!