我正在尝试调用一个批处理文件,该文件打包在jar文件本身的jar文件中。我并不完全确定这是可能的,但我想如果有人知道这里会有人怎么样。
import java.io.IOException;
import java.net.URISyntaxException;
public class FileLocationFinder {
public static void main(String[] args) throws IOException, URISyntaxException {
String curdir = System.getProperty("user.dir");
System.out.println("The User.dir = " + curdir);
File newFile = new File (FileLocationFinder.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
String strNewFile = newFile.toString();
System.out.println("The New Path = " + strNewFile);
String abPath = new File(".").getAbsolutePath();
System.out.println("The absolutePath = " + abPath);
String conPath = new File(".").getCanonicalPath();
System.out.println("The Canonical Path = " + conPath);
runDir(strNewFile);
}
public static void runDir(String dir){
final int exitVal;
final Process dirprocess;
try {
System.out.println("Running from curdir");
dirprocess = Runtime.getRuntime().exec(dir + "\\" + "SomeBatch.bat");
try {
exitVal = dirprocess.waitFor();
if(exitVal == 0){
System.out.println("Dir worked");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
SomeBatch.bat的内容是
echo I was called
当我编译然后运行时,这就像我期望的那样运行。但是当我创建jar文件时,我遇到了很多错误。
答案 0 :(得分:1)
你必须告诉Java在哪里查找你的.bat文件,你现在的方式只是在工作目录中搜索“dir \ Somebat.bat”。要在jar文件中搜索.bat,您需要使用ClassLoader的getResource或getResourceAsStream方法。然后,您可能必须将.bat复制到文件系统[例如user.home目录],并使用Runtime.exec()从那里启动它。