[英]How to execute a batch file from java?
我想從一個java程序執行一個批處理文件。
我正在使用以下命令。
Runtime.getRuntime().exec("server.bat");
但問題是我想給出一個反應路徑而不是絕對路徑,這樣我就可以在任何comp上部署那個java項目。
項目的dir結構如下:
com
|
project
|
------ parser
| |_____ Main.java
|
-------util
|_____ Server.bat
我想從“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();
當然,您的應用程序必須從某個地方獲取 deployDir。 它可以在環境中設置,在應用程序配置文件中,它可以是當前用戶目錄或其他任何東西。
您必須使用參數“/c”和“server.bat”運行“cmd.exe”:
Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "server.bat" } );
當 Java 正在運行並且您使用帶有相對路徑的 Runtime.exec() 時,相對意味着相對於調用 JVM 的當前用戶目錄。
這可能有效
Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat");
如果您從 com 的父目錄啟動 java。
或者你必須計算一個絕對路徑:
Runtime.getRuntime().exec("cmd.exe", "/c",
System.getProperty("user.dir")+"/com/projct/util/server.bat");
我忘記了,請閱讀When Runtime.exec() won't 。
如果支持,您可以使用 Desktop 進行嘗試 (Java 1.6)
File file = new File("server.bat");
Desktop.getDesktop().open(file);
Plexus utils提供了一種命令行類型,可以調用任意命令行並處理輸出解析。
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
}
最好的辦法是將應用程序的安裝目錄存儲在系統上,然后使用它在應用程序中構建路徑。 System.getProperty("user.dir") 應該在 Windows 和 Unix 平台上工作以獲取當前工作目錄,但它取決於系統,因此請注意這一點。
exec 的第二個參數是環境設置的 args 的 String[](null 表示繼承進程的當前參數), exec 的第三個參數應該是提供工作目錄的文件。 嘗試這個:
Runtime.getRuntime().exec("cmd /c server.bat", null, new File("./com/project/util"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.