如何在不使用 shell 的情况下将多个文件提供给 java 中的命令行

how to feed multipe files to command line in java without using shell

我对 java 很陌生,所以这可能是个愚蠢的问题。但是我需要为我的数据结构 class 项目解决它...

所以我正在尝试为我的程序提供 2 个不同的输入文件。我知道我们可以使用 Scanner 和 InputStreamReader 通过 1 个文件来实现这一点,但我不知道我应该如何使用 2 个文件来实现。

在一些与我类似问题的回答中,有人提到shell,我认为这可能可以解决这个问题。但是,我对shell一无所知,所以我想知道是否可以在不编写shell文件的情况下解决这个问题,以及语法是什么用于在命令行中输入多个文件。

我在命令行中执行的内容(使用 1 个输入文件):

java UserInterfaceOrNot < input.txt > output.txt

如果需要,我会 post 更多代码。

代码:

public class UserInterfaceOrNot
{
    public static EventManager em;
    public static Scanner scn = new Scanner(new InputStreamReader(System.in));

    public static void main (String [] args)
    {
        UserInterfaceOrNot ui = new UserInterfaceOrNot();
        while (scn.hasNext()){ui.runData();}
        scn = new Scanner(new InputStreamReader(System.in));
        while (scn.hasNext() && !scn.next().equals("x")){ui.runCommand();}
    }
java UserInterfaceOrNot input1.txt input2.txt output.txt

当您这样调用您的程序时,实际上是将 3 个参数传递给您的 java public static void main (String [] args) 方法。 您可以在该字符串数组 (String [] args) 中按顺序找到这些参数。 要阅读参数:

  1. String myFirstFile = args[0]; // 这将是 "input1.txt"
  2. String mySecondFile = args[1]; // 这将是 "input2.txt"
  3. String myOutputFile = args[2]; // 这将是 "output.txt"

您可以通过创建另一个方法来像这样读取每个文件(input1 和 input2)

public String readFileAsString(String inputFile) throw IOException {
    BufferedReader br = new BufferedReader(new FileReader(inputFile));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }

        return sb.toString();
    } finally {
        br.close();
    }

}

然后在你的主要方法中你可以这样调用它:

public static void main(String[] args) throws Exception {
    UserInterfaceOrNot ui = new UserInterfaceOrNot();
    String inputFile1 = args[0];
    String inputFile2 = args[1];

    String input1AsString = ui.readFileAsString(inputFile1);
    String input2AsString = ui.readFileAsString(inputFile2);
    //continue with your logic
}