关于java运行Runtime.getRuntime().exec,启动jar包后,路径出错的问题

背景:

有项目A,放置在E:/ 根目录下,有项目B,放置在E:/bp/ 目录下。

项目A负责项目B的重启,通过cmd命令以及bat脚本。

java里面,运行系统命令的代码:

String commands= "";
Process pro = Runtime.getRuntime().exec(commands);

exec方法源码:

public Process exec(String command) throws IOException {
    return exec(command, null, null);
}

可以看到,他后面还有两个参数,默认都为null。关于这两个参数,可以在同一个class文件里头找到对应的说明:

@param   envp      array of strings, each element of which
                     has environment variable settings in the format
                    <i>name</i>=<i>value</i>, or
                    <tt>null</tt> if the subprocess should inherit
                    the environment of the current process.

@param   dir       the working directory of the subprocess, or
                    <tt>null</tt> if the subprocess should inherit
                    the working directory of the current process.

大致就是,envp是子线程应该继承的一些变量配置,为空时默认以当前线程为主。

而dir,是目录。为空时默认继承当前的线程目录。大概就是,如果你要在A.jar里执行 java -jar E:/bp/B.jar 命令,如果没有设置dir,那么B.jar在启动后,将默认以E:/ 目录为主,这时候,你在B.jar获取的路径,如:

getPath(),
getAbsolutePath(),
getCanonicalPath()

都会取到E:/ 根目录,而不是E:/bp/ 

所以,如果有需要,需要特别指明,如下:

String commands= "";
File file = new File("E:/bp/");
Process pro = Runtime.getRuntime().exec(commands, null, file);

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值