每次我们用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,问题就是比较容易解决了。
分享到:
相关推荐
JVMJava虚拟机的简单讲解.pdf
jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识
可能有很多学习Java的朋友还不知道Java的运行原理、Java虚拟机是怎么工作的,本文将为你详细讲解(JVM)Java 虚拟机。
本书讲述了Java虚拟机一运行 所有Java程序的抽象计算机,还讲了几种与虚拟机密切相关的核心Java API。本书通过分析讲解、可运行的示例、参考资料和applet (它作为文中所述概念的交互式例示),提供了Java技术的深人...
JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化
java虚拟机第二版
第1章 :简单地介绍了Java虚拟机的历史并吹捧了←_← 一下Java的平台无关性(一次编译,到处运行); 第2章:概览Java虚拟机整体架构; 第3章:介绍如何将Java语言编写的程序转换为虚拟机指令集; 第4章:定义...
深入了解jvm,理解java虚拟机底层实现。是一个很不错的额视频教程
本书摒弃了传统的以解读枯燥的Java虚拟机规范文档和分析繁琐的Java虚拟机源代码的方式来讲解Java虚拟机,取而代之的是,以实践的方式,引导读者如何从零开始构建和实现一个Java虚拟机,整个过程不仅能让读者做到对...
如果你对java虚拟机感兴趣,并且从未接触过JVM,那么这本书将带你走入JVM世界。
jvm java虚拟机 Mycelipse内存不足
实战java虚拟机,实战java虚拟机,小弟不才,没有文采。
不废话Java 虚拟机入门黄金搭档。JVM规范+深入JAVA虚拟机(附带源码)。
实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)
《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...
java虚拟机简单原理jvm. java虚拟机简单原理jvm
非扫描版 文字版高清 可以复制
java8虚拟机规范,适合中文较好的同学尝试,对虚拟机底层的知识进行接触及学习,俗话说的好,磨刀不误砍柴工,一起进步吧!!!
java 虚拟机
作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益! 本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...