我从一个处理给定XML文件并提取纯文本的Eclipse项目构建了一个可运行的JAR。但是,该版本要求在代码中对文件进行硬编码。将命令行参数传递给可运行的JAR
有没有办法做这样的事情
java -jar wiki2txt enwiki-20111007-pages-articles.xml
,并有罐子上的XML文件执行?
我已经做了一些四处寻找,所有的例子都是在命令行上编译JAR,而没有涉及传入参数。
我从一个处理给定XML文件并提取纯文本的Eclipse项目构建了一个可运行的JAR。但是,该版本要求在代码中对文件进行硬编码。将命令行参数传递给可运行的JAR
有没有办法做这样的事情
java -jar wiki2txt enwiki-20111007-pages-articles.xml
,并有罐子上的XML文件执行?
我已经做了一些四处寻找,所有的例子都是在命令行上编译JAR,而没有涉及传入参数。
为什么不呢?
只需修改您的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
你可以在命令行上传递程序参数,并让他们在你的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");
....
}
以这种方式运行应用程序时,java可执行文件读取您的jar中的MANIFEST并查找您定义的主类。在这个类中你有一个名为main的静态方法。在这种方法中,您可以使用命令行参数。
您还可以在命令行上设置Java属性(即环境变量),并在代码中的任意位置轻松使用它。
的命令行将做这种方式:
C:/> Java的罐子-Dmyvar = enwiki-20111007-页-articles.xml wiki2txt
和Java代码访问值如下:
String context = System.getProperty("myvar");
看到关于argument passing in Java的这个问题。
Java属性不是一个环境变量。他们可以达到同样的目的,但他们是不同的事物。 – devdanke
感谢您的澄清。只有以前我不得不为Java程序输入参数的时候都是通过eclipse-only执行的。它们都不是独立产品,我也没有意识到同样的原则是成立的。 – Jason
为什么“InputStream inputStream = MyClass.class.getResourceAsStream(args [0]);”不行? –
@ArthurEirich这听起来像是一个不同的问题。打印你的“args [0]”..如果输出正确的值,那么你可以成功地将命令行参数传递给jar文件。 – Kal