2011-11-14 165 views
24

我从一个处理给定XML文件并提取纯文本的Eclipse项目构建了一个可运行的JAR。但是,该版本要求在代码中对文件进行硬编码。将命令行参数传递给可运行的JAR

有没有办法做这样的事情

java -jar wiki2txt enwiki-20111007-pages-articles.xml 

,并有罐子上的XML文件执行?

我已经做了一些四处寻找,所有的例子都是在命令行上编译JAR,而没有涉及传入参数。

回答

29

为什么不呢?

只需修改您的Main-Class即可接收参数并根据参数采取行动。

public class wiki2txt { 

    public static void main(String[] args) { 

      String fileName = args[0]; 

      // Use FileInputStream, BufferedReader etc here. 

    } 
} 

指定命令行中的完整路径。

java -jar wiki2txt /home/bla/enwiki-....xml 
+0

感谢您的澄清。只有以前我不得不为Java程序输入参数的时候都是通过eclipse-only执行的。它们都不是独立产品,我也没有意识到同样的原则是成立的。 – Jason

+0

为什么“InputStream inputStream = MyClass.class.getResourceAsStream(args [0]);”不行? –

+0

@ArthurEirich这听起来像是一个不同的问题。打印你的“args [0]”..如果输出正确的值,那么你可以成功地将命令行参数传递给jar文件。 – Kal

4

你可以在命令行上传递程序参数,并让他们在你的Java应用程序是这样的:

public static void main(String[] args) { 
    String pathToXml = args[0]; 
.... 
} 

或者您可以通过命令行改变通过系统属性java -Dpath-to-xml=enwiki-20111007-pages-articles.xml -jar wiki2txt

和您的主要类为:

public static void main(String[] args) { 
    String pathToXml = System.getProperty("path-to-xml"); 
.... 
} 
0

以这种方式运行应用程序时,java可执行文件读取您的jar中的MANIFEST并查找您定义的主类。在这个类中你有一个名为main的静态方法。在这种方法中,您可以使用命令行参数。

26

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

的命令行将做这种方式:

C:/> Java的罐子-Dmyvar = enwiki-20111007-页-articles.xml wiki2txt

和Java代码访问值如下:

String context = System.getProperty("myvar"); 

看到关于argument passing in Java的这个问题。

+3

Java属性不是一个环境变量。他们可以达到同样的目的,但他们是不同的事物。 – devdanke

相关问题