JVM中进程的工作目录
来源:互联网 发布:sql语句删除列 编辑:程序博客网 时间:2024/05/18 02:57
/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.
参见下面的连接:
http://gcc.gnu.org/ml/java/2000-q1/msg00408.html
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4045688
所以,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中进程的工作目录
- JVM中进程的工作目录
- 进程的工作目录
- 进程的默认工作目录
- 进程工作目录的继承
- 改变进程的工作目录
- unbutu查看进程的工作目录
- 关于VS2008 进程的工作目录
- 如何找到进程的工作目录
- MFC - 切换进程当前的工作目录
- 进程工作目录
- vc怎样通过进程名获取进程的工作目录.
- 通过进程名获取进程的工作目录
- java中jvm的工作原理
- JVM中ClassLoader的工作机制
- makefile 中切换工作目录的问题
- Android中init进程的工作
- 文件系统--procfs中进程目录的问题
- IOS常用设计模式——观察者模式(IOS开发)
- The new features of OSX 10.11 and Xcode 7
- Set接口
- [leetcode 205] Isomorphic Strings
- 使用bootStrap-validator
- JVM中进程的工作目录
- 类的合理设计
- DFS入门:全排列算法及POJ 1564 Sum it up详解
- 制作initrd(1):向initrd内部更新驱动模块
- 越来越觉得自己啥都不会
- 方法的声明和实现
- Java字符串String中contains与indexOf的区别
- Python基础_scrapy安装心得
- java取得当前工作目录