JVM(Java虛擬機器)中進程工作目錄講解

來源:互聯網
上載者:User

每次我們用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,問題就是比較容易解決了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.