将命令行参数传递给runnable JAR

Jas*_*son 34 java jar command-line-arguments

我从Eclipse项目构建了一个可运行的JAR,它处理给定的XML文件并提取纯文本.但是,此版本要求在代码中对文件进行硬编码.

有没有办法做这样的事情

java -jar wiki2txt enwiki-20111007-pages-articles.xml
Run Code Online (Sandbox Code Playgroud)

并在xml文件上执行jar?

我已经做了一些环顾四周,所有给出的例子都与在命令行上编译JAR有关,而且没有一个涉及传入参数.

Kal*_*Kal 37

为什么不 ?

只需修改你Main-Class的接收参数并根据参数采取行动.

public class wiki2txt {

    public static void main(String[] args) {

          String fileName = args[0];

          // Use FileInputStream, BufferedReader etc here.

    }
}
Run Code Online (Sandbox Code Playgroud)

在命令行中指定完整路径.

java -jar wiki2txt /home/bla/enwiki-....xml
Run Code Online (Sandbox Code Playgroud)


Kel*_*nch 29

您还可以在命令行上设置Java属性(即环境变量),并在代码中的任何位置轻松使用它.

命令行将以这种方式完成:

c:/> java -jar -Dmyvar = enwiki-20111007-pages-articles.xml wiki2txt

并且java代码访问这样的值:

String context = System.getProperty("myvar"); 
Run Code Online (Sandbox Code Playgroud)

请参阅有关Java中的参数传递的问题.

  • Java属性不是环境变量.它们可以起到同样的作用,但它们是不同的东西. (6认同)

lag*_*lle 5

您可以在命令行上传递程序参数,并通过以下方式在Java应用程序中获取它们:

public static void main(String[] args) {
  String pathToXml = args[0];
....
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过将命令行更改为以下内容来传递系统属性:

java -Dpath-to-xml=enwiki-20111007-pages-articles.xml -jar wiki2txt

和您的主要班级:

public static void main(String[] args) {
  String pathToXml = System.getProperty("path-to-xml");
....
}
Run Code Online (Sandbox Code Playgroud)