2011-02-15 40 views
4

我运行一个简单的Java程序与下面的目录结构:Java VM如何决定user.dir系统属性的值?

MyProject (A project in my Eclipse IDE) 
'-- src 
     '-- Hello.java 

在Hello.java我打印的“user.dir来”系统属性的值。

System.out.println(System.getProperty("user.dir")); 

我的班级的编译文件存储在MyProject\bin文件夹中。

当我从Eclipse(右键单击源文件并单击运行 - > Java应用程序)运行此类时,它会在控制台窗口中打印'MyProject'文件夹的路径,即D:\Projects\Workspace\MyProject

然后我用命令窗口运行相同的程序。这是我上键入窗口:

D:\Projects\Workspace\MyProject\bin>java Hello 

和输出的控制台:D:\Projects\Workspace\MyProject\bin

bin已经被添加到了user.dir来之前的值。

此外,为了检查更多,我这个时间从不同的文件夹执行的Java命令上命令窗口:

D:\Projects\Workspace\MyProject>java -classpath D:\Projects\Workspace\MyProject\bin Hello 

上命令窗口此时间输出是:D:\Projects\Workspace\MyProject

该值的变化时,我在命令窗口中更改了文件夹,当我从Eclipse运行程序时,user.dir的值是项目文件夹。所以我想明白,推导'user.dir'的价值是什么基础? JVM如何决定,user.dir的价值是什么?

回答

9

正如java.lang.System specification the user.dir属性定义返回(当JVM启动即当前目录)当前的工作目录:

user.dir用户的当前工作 目录

我什么也看不到矛盾在你的榜样。这里唯一不清楚的是财产的名称。我不明白他们为什么选择把'用户'放在那里。

同样,如果您从完全不同的路径执行相同的Java程序,您将得到另一个路径作为结果。这种尝试自己:

c: 
cd c:\ 
java -cp D:\Projects\Workspace\MyProject\bin Hello 

什么Eclipse中运行程序前所做的是类似于:

d: 
cd d:\projects\workspace\myproject 
java -cp d:\projects\workspace\myproject\bin Hello 
+1

我一直在寻找从年龄这个答案..请务必使用新的文件(“” )找到当前目录。谢谢。 – 2013-04-16 17:51:40

1

的属性user.dir被定义为当前工作目录。 javadoc为System详细说明了各种不同的系统属性。

也许你真的想要user.home?

1

除了其他答案(这完全回答这个问题,我认为):

如果你实际上寻找一种方式来获得你的类文件,不要使用这个属性(或任何财产)。使用

System.out.println(Hello.class.getResource("/")); 

显示不/路径到您的包层次的根,和路径在一开始就相对于你Hello.class的目录。 (它的工作原理时,他们是一个jar文件中,也。)

0

默认系统性能

我总是试图找出Java中的默认属性,并有写这个程序。如果网上有东西,那么我可以避免这种麻烦。其良好的在这里有它:)

代码:

public class Test { 
    public static void main(String[] args) { 
     Properties prop = System.getProperties(); 
     prop.list(System.out); 
    } 
} 

输出适用于Windows XP

-- listing properties -- 
java.runtime.name=Java(TM) SE Runtime Environment 
sun.boot.library.path=C:\Program Files\Java\jre6\bin 
java.vm.version=19.0-b09 
java.vm.vendor=Sun Microsystems Inc. 
java.vendor.url=http://java.sun.com/ 
path.separator=; 
java.vm.name=Java HotSpot(TM) Client VM 
file.encoding.pkg=sun.io 
user.country=US 
sun.java.launcher=SUN_STANDARD 
sun.os.patch.level=Service Pack 3 
java.vm.specification.name=Java Virtual Machine Specification 
user.dir=C:\workspace\Test 
java.runtime.version=1.6.0_23-b05 
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment 
java.endorsed.dirs=C:\Program Files\Java\jre6\lib\endorsed 
os.arch=x86 
java.io.tmpdir=C:\DOCUME~1\Name~1\LOCALS~1\Temp\ 
line.separator= 

java.vm.specification.vendor=Sun Microsystems Inc. 
user.variant= 
os.name=Windows XP 
sun.jnu.encoding=Cp1252 
java.library.path=C:\Program Files\Java\jre6\bin;.;C:\W... 
java.specification.name=Java Platform API Specification 
java.class.version=50.0 
sun.management.compiler=HotSpot Client Compiler 
os.version=5.1 
user.home=C:\Documents and Settings\User Name 
user.timezone= 
java.awt.printerjob=sun.awt.windows.WPrinterJob 
file.encoding=Cp1252 
java.specification.version=1.6 
user.name=User Name 
java.class.path=C:\workspace\Test\bin 
java.vm.specification.version=1.0 
sun.arch.data.model=32 
java.home=C:\Program Files\Java\jre6 
java.specification.vendor=Sun Microsystems Inc. 
user.language=en 
awt.toolkit=sun.awt.windows.WToolkit 
java.vm.info=mixed mode, sharing 
java.version=1.6.0_23 
java.ext.dirs=C:\Program Files\Java\jre6\lib\ext;C:... 
sun.boot.class.path=C:\Program Files\Java\jre6\lib\resour... 
java.vendor=Sun Microsystems Inc. 
file.separator=\ 
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport... 
sun.cpu.endian=little 
sun.io.unicode.encoding=UnicodeLittle 
sun.desktop=windows 
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m... 
相关问题