有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javac如何从文本文件而不是java中的键盘为Scanner类提供输入数据?

我想从一个文本文件中提供我的程序的一系列输入,这样我就不必一次又一次地输入,我如何使用“javac”来实现这一点

我过去常常在C/C++程序中这样做,就我记忆中的gcc<;样品txt>;菲尔曼。我的教授告诉我这叫做批处理

有没有办法用javac做同样的事情,或者在VS代码中使用一些调整,这样我就不必在每次运行程序时都从键盘输入数据

谢谢大家!


共 (1) 个答案

  1. # 1 楼答案

    如果您希望能够运行相同的代码,不做任何更改,通过标准输入或文件获取用户输入,我建议定义一个“系统”属性作为标志,以确定用户输入来自何处,具体取决于是否定义了该属性

    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,那么它应该能够如上所述定义“系统”属性。还要注意,属性名可以是任何。我只是(随意)选择了重定向。但请记住,它是区分大小写的

    或者,您可以重定向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,这意味着路径是相对于类路径的