如何从文本文件而不是 java 中的键盘为扫描仪 class 提供输入数据?
How to provide the input data for Scanner class from a text file instead of keyboard in java?
我想从一个文本文件中提供我的程序的一系列输入,这样我就不必一次又一次地输入,我如何使用“javac”来做到这一点?
我曾经在 C/C++ 程序中这样做,据我记得 gcc filname.exe 它被称为批处理我的教授
有没有什么方法可以对 javac 做同样的事情,或者通过在 VS Code 中进行一些调整,这样我就不必每次 运行 程序时都从键盘输入?
谢谢!
如果您希望能够 运行 相同的代码,不加改动地通过标准输入或文件获取用户输入,我建议将“系统”定义为 属性根据是否定义了 属性 来确定用户输入的来源。
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Scanner;
public class Testings {
public static void main(String[] args) throws IOException {
String redirect = System.getProperty("REDIRECT");
Scanner scanner;
if (redirect != null) {
scanner = new Scanner(Paths.get("", args));
}
else {
scanner = new Scanner(System.in);
}
if (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
if (redirect != null) {
scanner.close();
}
}
}
如果您想从文件而不是标准输入输入,请使用以下命令 运行 代码。
java -DREDIRECT Testings path/to/file.txt
如果您希望用户通过键盘输入,然后删除 -DREDIRECT
,即
java Testings
由于您没有从文件中获取输入,因此无需提供路径。
请注意,如果您使用的是 IDE,那么它应该能够像上面那样定义“系统”属性。另请注意,属性 名称可以是 任何东西。我简单地(任意地)选择了 REDIRECT。但请记住,它区分大小写。
或者,您可以重定向 System.in
。
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
public class Testings {
private static void redirect(String[] args) throws IOException {
Path path = Paths.get("", args);
InputStream is = Files.newInputStream(path);
System.setIn(is);
}
public static void main(String[] args) throws IOException {
String redirect = System.getProperty("REDIRECT");
Scanner scanner;
if (redirect != null) {
redirect(args);
}
scanner = new Scanner(System.in);
if (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}
关于您用于输入的文件,文件的路径可以是相对路径也可以是绝对路径。如果是相对的,那么它是相对于当前工作目录的,也就是下面代码返回的值:
System.getProperty("user.dir");
或者,您可以将文件设为 resource,这意味着该路径是相对于 CLASSPATH 的。
我想从一个文本文件中提供我的程序的一系列输入,这样我就不必一次又一次地输入,我如何使用“javac”来做到这一点?
我曾经在 C/C++ 程序中这样做,据我记得 gcc
有没有什么方法可以对 javac 做同样的事情,或者通过在 VS Code 中进行一些调整,这样我就不必每次 运行 程序时都从键盘输入?
谢谢!
如果您希望能够 运行 相同的代码,不加改动地通过标准输入或文件获取用户输入,我建议将“系统”定义为 属性根据是否定义了 属性 来确定用户输入的来源。
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Scanner;
public class Testings {
public static void main(String[] args) throws IOException {
String redirect = System.getProperty("REDIRECT");
Scanner scanner;
if (redirect != null) {
scanner = new Scanner(Paths.get("", args));
}
else {
scanner = new Scanner(System.in);
}
if (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
if (redirect != null) {
scanner.close();
}
}
}
如果您想从文件而不是标准输入输入,请使用以下命令 运行 代码。
java -DREDIRECT Testings path/to/file.txt
如果您希望用户通过键盘输入,然后删除 -DREDIRECT
,即
java Testings
由于您没有从文件中获取输入,因此无需提供路径。
请注意,如果您使用的是 IDE,那么它应该能够像上面那样定义“系统”属性。另请注意,属性 名称可以是 任何东西。我简单地(任意地)选择了 REDIRECT。但请记住,它区分大小写。
或者,您可以重定向 System.in
。
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
public class Testings {
private static void redirect(String[] args) throws IOException {
Path path = Paths.get("", args);
InputStream is = Files.newInputStream(path);
System.setIn(is);
}
public static void main(String[] args) throws IOException {
String redirect = System.getProperty("REDIRECT");
Scanner scanner;
if (redirect != null) {
redirect(args);
}
scanner = new Scanner(System.in);
if (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}
关于您用于输入的文件,文件的路径可以是相对路径也可以是绝对路径。如果是相对的,那么它是相对于当前工作目录的,也就是下面代码返回的值:
System.getProperty("user.dir");
或者,您可以将文件设为 resource,这意味着该路径是相对于 CLASSPATH 的。