2011-02-15 37 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... 
相關問題