【Java】關於對System.getProperty中user.dir的理解

字面解釋

System.getProperty(“user.dir”)方法返回的是執行運行Java程序命令的路徑。這句話有一點歧義,還是通過舉例說明最合適。

舉例

用兩個用戶,一個是root,一個是普通用戶userone,可運行jar包在/home/userone/下面,有一個運行該jar包的sh腳本也在/home/userone/下面。可運行jar包內就是打印System.getProperty(“user.dir”)方法的結果。

root執行

  1. 當前所在路徑在/home下,即pwd命令返回/home,直接java -jar 執行,查看輸出結果
> pwd
> /home

> java -jar /home/userone/xx.jar

控制檯輸出:
/home
  1. 當前所在路徑在/home/userone下,即pwd命令返回/home/userone,直接java -jar 執行,查看輸出結果
> pwd
> /home/userone

> java -jar /home/userone/xx.jar

控制檯輸出:
/home/userone
  1. 當前所在路徑在/home下,即pwd命令返回/home,執行start.sh腳本運行jar包,查看輸出結果
> pwd
> /home

> ./userone/start.sh

控制檯輸出:
/home
  1. 當前所在路徑在/home/userone下,即pwd命令返回/home/userone,執行start.sh腳本運行jar包,查看輸出結果
> pwd
> /home/userone

> ./start.sh

控制檯輸出:
/home/userone

userone執行

  1. 當前所在路徑在/home下,即pwd命令返回/home,直接java -jar 執行,查看輸出結果
> pwd
> /home

> java -jar /home/userone/xx.jar

控制檯輸出:
/home
  1. 當前所在路徑在/home/userone下,即pwd命令返回/home/userone,直接java -jar 執行,查看輸出結果
> pwd
> /home/userone

> java -jar /home/userone/xx.jar

控制檯輸出:
/home/userone
  1. 當前所在路徑在/home下,即pwd命令返回/home,執行start.sh腳本運行jar包,查看輸出結果
> pwd
> /home

> ./userone/start.sh

控制檯輸出:
/home
  1. 當前所在路徑在/home/userone下,即pwd命令返回/home/userone,執行start.sh腳本運行jar包,查看輸出結果
> pwd
> /home/userone

> ./start.sh

控制檯輸出:
/home/userone

結論

從實際情況看,System.getProperty(“user.dir”)返回結果和用戶沒有關係,和jar包沒有關係,和運行jar包的sh腳本也沒有關係,只有和執行運行java命令的路徑有關係(無論是直接運行,還是通過sh腳本運行)。所以這裏需要注意的就是運行java程序的時候要統一在某個路徑下執行。如果上次在/home下執行,這次在/root下執行,得到的結果也是不一樣的。如果涉及到文件的上傳和下載,那麼這個路徑也就出現了改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章