JVM(Java虚拟机)中进程工作目录讲授[Java编程]
本文“JVM(Java虚拟机)中进程工作目录讲授[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
每次我们用Java号令运行我们的Java程序,城市在JVM中开启一个进程,关于每一个进程,城市有一个相对应的工作目录,这个工作目录在虚拟机初始化的时刻就已经设置好了,默许的情形下,工作目录是我们工程的根目录,比方:
/home/test/Project-
--bin
--divinemind.onlyfun.test.helloworld.java
--src
假定我们在用下面的号令启动helloworld,那么这个进程的根目录就是/home/test/Project/bin,helloworld里举行操作需求的资源,比方文件什么的,城市在这个目录举行查找.
在Windows下,情形也是相同的.
我们可以通过
---------------------
System.getProperty(“user.dir”);
----------------------
获得当行进程的工作目录,并且当我们想改变这个工作目录的时刻,也可以通过
---------------------
System.setProperty(“user.dir”,”/home/test/xxxxxxx”);
---------------------
设置当行进程的工作目录,但是,事实上,user.dir这个系统环境是不可以重新设置的,问题很多,最常见的问题,当行进程下的全部线程都在利用这个环境变量,假如改正的话,危险不可思议,Sun的JDK这样做预计是一个小BUG.所以,System.setProperty这个办法只是让我们看看,实际上没有作用.在Sun的JDK1.4中,当行进程的工作目录是没有办法改正的,在JDK1.5中,ProcessBuilder在这方面有所改良.
当我们没有挑选需求利用非工作目录下的资源的时刻,比方:Java调用A, A利用B,B和A在同一个目录下,A和B不在当行进程的工作目录下,这样的话,程序必定运行会有问题,这个时刻有两个办法可以办理
1. 全部的途径都写绝对途径
全部的途径写绝对途径可以实现,但是程序在布置的时刻麻烦非常多,保护也艰难,但是办法简单,直观.
2. 在当行进程中新开一个子进程,改正子进程的工作目录
在Java中新开一个子进程的办法跟JDK版本有关:
A.JDK1.4中:
-------------------------
Process process = System.getRuntime.exec(arg1,arg2,arg3);
arg1:系统号令
arg2:号令运行的环境变量
arg3:子进程的工作目录,在这个地方便可以设置我们自己想要的工作目录,到达利用非父进程工作目下资源的办法.
-------------------------
B.JDK1.5中:
在这个版本中,我们可以利用ProcessBuilder来新开一个JVM进程.
下面的代码可以实现这里我们的功效:
-------------------------
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
// myDir就是当行进程的工作目录,假如不设置,那就是默许为父进程的工作//目录
pb.directory("myDir");
Process p = pb.start();
-------------------------
Java在平常跟操作系统的关系确切很少,我们都很少碰到问题,但是假如我们调用操作系统号令什么的时刻,麻烦就多起来了,不过假如我们更多地理解JVM,问题就是对比简单办理了.
以上是“JVM(Java虚拟机)中进程工作目录讲授[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |