我想从java程序执行批处理文件.
我使用以下命令.
Runtime.getRuntime().exec("server.bat");
Run Code Online (Sandbox Code Playgroud)
但问题是我想给出一个reative路径而不是绝对路径,以便我可以在任何comp上部署该java项目.
项目的目录结构如下:
com
|
project
|
------ parser
| |_____ Main.java
|
-------util
|_____ Server.bat
Run Code Online (Sandbox Code Playgroud)
我想从"parser"目录中的"Main.java"文件中运行"util"目录中的"Server.bat"文件.
你可以用ProcessBuilder
它.它提供了更多的控制exec
.特别是,它允许使用方法设置工作目录directory
.
例:
ProcessBuilder pb = new ProcessBuilder("server.bat");
pb.directory(new File(deployDir + "\\com\\project\\util"));
Process p = pb.start();
int exitStatus = p.waitFor();
Run Code Online (Sandbox Code Playgroud)
当然,您的应用必须从某个地方获得deployDir.它可以在环境中设置,在应用程序配置文件中,可以是当前用户目录或其他任何内容.
您必须使用参数"/ c"和"server.bat"运行"cmd.exe":
Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "server.bat" } );
Run Code Online (Sandbox Code Playgroud)
当Java运行并且您使用带有相对路径的Runtime.exec()时,相对意味着相对于调用JVM的当前用户目录.
这可能有效
Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat");
Run Code Online (Sandbox Code Playgroud)
如果你从com的父目录启动java.
或者你必须计算一个绝对路径:
Runtime.getRuntime().exec("cmd.exe", "/c",
System.getProperty("user.dir")+"/com/projct/util/server.bat");
Run Code Online (Sandbox Code Playgroud)
我忘了,读Runtime.exec()时不会.
如果支持(Java 1.6),您可以尝试使用桌面
File file = new File("server.bat");
Desktop.getDesktop().open(file);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56248 次 |
最近记录: |