How to execute a batch file from java?
我想从Java程序中执行批处理文件。
我使用以下命令。
1 |
但问题是,我想给出一个替代路径,而不是绝对路径,以便在任何COMP上部署Java项目。
项目的DIR结构如下:
1 2 3 4 5 6 7 8 9 | com | project | ------ parser | |_____ Main.java | -------util |_____ Server.bat |
我想从"分析器"DIR中的"Mudi.java"文件中运行"UTIL"DIR文件中的"Server .BAT"文件。
您可以使用
例子:
1 2 3 4 |
当然,你的应用程序必须从某个地方得到部署。它可以在环境中设置,在应用程序配置文件中,它可以是当前用户目录或任何其他目录。
您必须使用参数"/c"和"server.bat"运行"cmd.exe":
当Java运行时,您使用RunTime.Excor()使用相对路径,相对于当前用户指向的相对手段,调用JVM。
这可能起作用
1 |
如果从COM的父目录启动Java。
或者必须计算绝对路径:
1 2 |
我忘记了,当runtime.exec()不需要时读取。
如果支持的话,可以用桌面试试它(Java 1.6)
exec的第二个参数是环境设置的参数字符串[](空表示继承进程的当前参数),exec的第三个参数应该是提供工作目录的文件。试试这个:
最好是将应用程序的安装目录存储在系统上,然后使用该目录在应用程序中构建路径。system.getproperty("user.dir")应该在Windows和Unix平台上工作以获取当前的工作目录,但它依赖于系统,因此请注意这一点。
Plexus utils提供了一个命令行类型,可以调用任意命令行并处理输出的解析。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | Commandline cl = new Commandline(); cl.setExecutable("cmd.exe" ); cl.createArg().setValue("/c" ); cl.setWorkingDirectory( new File(System.getProperty("user.dir"), "/com/project/util/Server.bat")); cl.createArg().setValue("/c" ); StreamConsumer consumer = new StreamConsumer() { public void consumeLine( String line ) { //do something with the line } }; StreamConsumer stderr = new StreamConsumer() { public void consumeLine( String line ) { //do something with the line } }; int exitCode; try { exitCode = CommandLineUtils.execute( cl, consumer, stderr, getLogger() ); } catch ( CommandLineException ex ) { //handle exception } |