运行 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
循环之外调用它)。
我有一个程序应该从命令行获取输入并将它们定向到标准输入并将输出定向到标准输出.应输入命令行的代码应如下所示:
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
循环之外调用它)。