运行 Java 通过带有输入和输出文件的命令提示符程序

Running Java program via Command Prompt with input and output files

我有一个程序应该从命令行获取输入并将它们定向到标准输入并将输出定向到标准输出.应输入命令行的代码应如下所示:

java    package.sub.Calc    <   input-file >    output-file

echo    some    inputs  to  the calculator  |   java    
package.sub.Calc

但我似乎无法让它正常工作。目标是能够将文本文件传递到程序中,或者直接在命令行上写下您的数学问题并将其通过管道输入。

程序正确运行

java -cp . package.sub.Calc

然后让用户输入他们的问题并按回车键。

如果我有一个名为 input.txt 的文件并想从命令行调用它并在命令行中打印出答案(程序设计为 System.out.println)我将如何输入此信息在?

我当前的代码为 System.in 实现了 Scanner。我是否必须使用其他任何东西才能让它工作?我是 运行 命令提示符中的任何新手,似乎无法让它工作。

非常感谢任何帮助。

我的代码:

public static void main(String[] args) {
    Calc calc = new Calc();
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    String input = "";
     List<String> strs = new ArrayList<>();
    ArrayList<String> tokens;
    while (sc.hasNextLine()) {
        String line = sc.nextLine().trim();
        if (line.isEmpty()) {
            for (String s : strs) {
                sb.append(s);
                input = sb.toString();
            }
            tokens = new ArrayList<>(Arrays.asList(input.split(" ")));
            //call calculate and reset
            calc.calculate(tokens);
            strs.clear();
            tokens.clear();
            sb.setLength(0);
            input = "";
        } else if (line.length() == 1) {
            strs.add(" ");
            strs.add(line);
            strs.add(" ");
        //manual user exit case
        } else if (line.equals("EXIT")){
            System.exit(0);
        }else {
            strs.add(line);
        }
    }
}

您的输入会在您的 main 方法中收到。 public static void main (String[] args)args 数组是接收输入参数的数组,如果你有 运行 你的程序 java -cp . <main_class_pat> <arg0> <arg1> ...

确保您的 args 数组具有所需的长度...如果是这样,您的输入文件将位于 arg[0]

您似乎有 2 个问题。

1) 当您手动 运行 程序时,您包括了 -cp 命令行选项,但当您尝试从输入中读取时却没有。在这两种情况下您都需要它 - 它告诉 java 在哪里可以找到您的 class 文件。

2) 您处理输入的方式与您传递的输入不匹配。

您只会在收到空行 (if(line.isEmpty())) 时调用 calculate,但是

echo some inputs to the calculator | java -cp . package.sub.Calc

永远不会产生空行。

您要么需要做:

printf "%s\n\n"  "some inputs to the calculator" | java -cp . package.sub.Calc 

或更改触发 calculate 的条件(可能通过在 while 循环之外调用它)。