使用输入和输出文件通过命令提示符运行Java程序

时间:2016-05-19 02:40:58

标签: java command-line piping

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

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

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

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

程序正确运行

java -cp . package.sub.Calc

然后让用户输入他们的问题然后按Enter键。

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

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

非常感谢任何帮助。

我的代码:

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);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你似乎有两个问题。

1)当您手动运行程序时,您需要包含-cp命令行选项,但是当您尝试从输入中读取时,则不包括calculate命令行选项。在这两种情况下你都需要它 - 它告诉 java 在哪里找到你的类文件。

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

只有在收到空行(if(line.isEmpty()))时才会调用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的条件(可能是在 Definition Continuous (X:Type)(TX:Topology X)(Y:Type)(TY:Topology Y)(f:X->Y):= forall V, exists U, all y:V, some x:U, f x = y. 循环之外调用它。)

答案 1 :(得分:-1)

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

,它将接收您的输入参数

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