如何在控制台中执行 运行 命令时为 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
}
}
}
所以这似乎是一个微不足道的问题,但我找不到任何信息可以回答我的问题。尽管如此,这是一个非常笼统的编码问题。
假设您有一个 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
}
}
}