家庭电脑可以做网站吗,网站运营的内容,陕西免费做网站公司,制作视频教程JVM(Java虚拟机)中进程工作目录讲解每次我们用Java命令运行我们的Java程序#xff0c;都会在JVM中开启一个进程#xff0c;对于每一个进程#xff0c;都会有一个相对应的工作目录#xff0c;这个工作目录在虚拟机初始化的时候就已经设置好了#xff0c;默认的情况下#…JVM(Java虚拟机)中进程工作目录讲解每次我们用Java命令运行我们的Java程序都会在JVM中开启一个进程对于每一个进程都会有一个相对应的工作目录这个工作目录在虚拟机初始化的时候就已经设置好了默认的情况下工作目录是我们工程的根目录比如/home/test/Project---bin--divinemind.onlyfun.test.helloworld.java--src假如我们在用下面的命令启动helloworld那么这个进程的根目录就是/home/test/Project/binhelloworld里进行操作需要的资源比如文件什么的都会在这个目录进行查找。在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使用BB和A在同一个目录下A和B不在当前进程的工作目录下这样的话程序肯定运行会有问题这个时候有两个办法可以解决1 所有的路径都写绝对路径所有的路径写绝对路径可以实现但是程序在部署的时候麻烦非常多维护也困难但是方法简单直观。2 在当前进程中新开一个子进程修改子进程的工作目录在Java中新开一个子进程的方法跟JDK版本有关AJDK1.4中Process process System.getRuntime.exec(arg1,arg2,arg3);arg1系统命令arg2命令运行的环境变量arg3子进程的工作目录在这个地方就可以设置我们自己想要的工作目录达到使用非父进程工作目下资源的方法。BJDK1.5中在这个版本中我们可以使用ProcessBuilder来新开一个JVM进程。下面的代码可以实现这里我们的功能ProcessBuilder pb new ProcessBuilder(myCommand, myArg1, myArg2);// myDir就是当前进程的工作目录如果不设置那就是默认为父进程的工作//目录pb.directory(myDir);Process p pb.start();Java在平时跟操作系统的关系确实很少我们都很少碰到问题但是如果我们调用操作系统命令什么的时候麻烦就多起来了不过如果我们更多地了解JVM问题就是比较容易解决了。