如何在控制台中执行 运行 命令时为 java 程序提供外部文件?

How to provide java program with external files when executing the run command in console?

所以这似乎是一个微不足道的问题,但我找不到任何信息可以回答我的问题。尽管如此,这是一个非常笼统的编码问题。

假设您有一个 java 程序读取文件并根据文件提供的信息创建数据结构。所以你这样做:

javac javaprogram.java
java javaprogram

很简单,但我想在这里为程序提供一个在命令行中指定的文件,如下所示:

javac javaprogram.java
java javaprogram -file

我必须写什么代码才能结束这个问题? 谢谢

您可以通过两种方式将文件路径作为参数传递:

1)

public class Main {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("File path plz");
            return;
        }
        System.out.println("File path: " + args[0]);
    }

}

2) 使用JCommander

最简单的方法是使用-D,所以如果你有一些文件,你可以调用

java -Dmy.file=file.txt javaprogram

在你的程序中,你可以用 System.getProperty("my.file") 阅读它。

public class Main {

    public static void main(String[] args) {

        String filename = System.getProperty("my.file");
        if (filename == null) {
            System.exit(-1); // Or wharever you want
        }

        // Read and process your file
    }
}

或者您可以使用第三方工具,例如 picocli

import java.io.File;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;

@Command(name = "Sample", header = "%n@|green Sample demo|@")
public class Sample implements Runnable {

    @Option(names = {"-f", "--file"}, required = true, description = "Filename")
    private File file;

    @Override
    public void run() {
        System.out.printf("Loading %s%n", file.getAbsolutePath());
    }

    public static void main(String[] args) {
        CommandLine.run(new Sample(), System.err, args);
    }
}

让我们一步一步来。首先,您需要将文件路径传递给您的程序。 假设您这样执行程序:

java javaprogram /foo/bar/file.txt

"javaprogram" 之后的字符串将作为参数传递给您的程序。这就是主要方法语法背后的原因:

public static void main(String[] args) {
 //args is the array that would store all the values passed when executing your program
 String filePath = args[0]; //filePath will contain /foo/bar/file.txt
}

现在您已经能够从命令行获取文件路径和名称,您需要打开并读取您的文件。

查看文件 class 和 FileInputStream class。 https://www.mkyong.com/java/how-to-read-file-in-java-fileinputstream/

这应该让你开始了。

祝你好运!

最好的 命令行 实用程序库之一 Java JCommander

基于您的线程描述的简单实现是:

public class javaprogram {

    @Parameter(names={"-file"})
    String filePath;

    public static void main(String[] args) {
        // instantiate your main class
        javaprogram program = new javaprogram();

        // intialize JCommander and parse input arguments
        JCommander.newBuilder().addObject(program).build().parse(args);
        
        // use your file path which is now accessible through the 'filePath' field
    }

}

编译 javaprogram.java[=25= 时,您应该确保库 jar 在您的 class 路径下可用] class 文件.

否则,如果您不需要程序参数周围的实用程序,您可以使程序入口足够简单,将文件路径读取为原始程序参数:

public class javaprogram {

    private static final String FILE_SWITCH = "-file";

    public static void main(String[] args) {
        if ((args.length == 2) && (FILE_SWITCH.equals(args[0]))) {
            final String filePath = args[1];
            // use your file path which is now accessible through the 'filePath' local variable
        }
    }

}