如何从文本文件而不是 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 的。