3

我正在尝试使用文件重定向运行 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不是空文件。我应该怎么做才能使文件重定向起作用?

4

2 回答 2

8

以这种形式重定向只是替换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 命令的一部分输出。由于换行符或其他问题,它可能无法按照您想要的方式工作。

于 2013-10-31T03:26:48.433 回答
4

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

要从输入中读取该数据,请将其System.in作为 an读取InputStream或将其包装在 a 中Reader

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

... s.readLine() 

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

于 2013-10-31T03:32:49.990 回答