当前位置:首页 > 全部子站 > IT > 思科认证

JVM中进程的工作目录

来源:长理培训发布时间:2017-12-23 16:41:30

 百度广告

  每次我们用Java命令运行我们的Java程序,都会在JVM中开启一个进程,对于每一个进程,都会有一个相对应的工作目录,这个工作目录在虚拟机初始化的时候就已经设置好了,默认的情况下,工作目录是我们工程的根目录,  比如: /home/test/Project---bin--divinemind.onlyfun.test.helloworld.java--src

 假如我们在用下面的命令启动helloworld,那么这个进程的根目录就是/home/test/Project/bin,helloworld里进行操作需要的资源,比如文件什么的,都会在这个目录进行查找。在Windows下,情况也是相同的。

我们可以通过

--------------------- 
----------------------

取得当前进程的工作目录,而且当我们想改变这个工作目录的时候,也可以通过

--------------------- 
---------------------

设置当前进程的工作目录,但是,事实上,user.dir这个系统环境是不可以重新设置的,问题很多,最常见的问题,当前进程下的所有线程都在使用这个环境变量,如果修改的话,危险可想而知,Sun的JDK这样做估计是一个小BUG. 

http://gcc.gnu.org/ml/java/2000-q1/msg00408.html 

  所以,System.setProperty这个方法只是让我们看看,实际上没有作用。在Sun的JDK1.4中,当前进程的工作目录是没有办法修改的,在JDK1.5中,ProcessBuilder在这方面有所改进。

  当我们没有选择需要使用非工作目录下的资源的时候,比如:Java调用A, A使用B,B和A在同一个目录下,A和B不在当前进程的工作目录下,这样的话,程序肯定运行会有问题,这个时候有两个办法可以解决

  1. 所有的路径都写绝对路径

  所有的路径写绝对路径可以实现,但是程序在部署的时候麻烦非常多,维护也困难,但是方法简单,直观。

  2. 在当前进程中新开一个子进程,修改子进程的工作目录

  在Java中新开一个子进程的方法跟JDK版本有关:

A.JDK1.4中:

------------------------- 
arg1:系统命令 
arg3:子进程的工作目录,在这个地方就可以设置我们自己想要的工作目录,达到使用非父进程工作目下资源的方法。 

B. JDK1.5中:

  在这个版本中,我们可以使用ProcessBuilder来新开一个JVM进程。

  下面的代码可以实现这里我们的功能

------------------------ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");// myDir就是当前进程的工作目录,如果不设置,那就是默认为父进程的工作//目录 pb.directory("myDir");Process p = pb.start();---------------------------------

  Java在平时跟操作系统的关系确实很少,我们都很少碰到问题,但是如果我们调用操作系统命令什么的时候,麻烦就多起来了,不过如果我们更多地了解JVM,问题就是比较容易解决了。

 

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部