2012-09-04 41 views
1

我想在具有多個依賴關係的巨型命令行應用程序中獲取當前用戶路徑。每當一個「。」被使用時,它給了我應用程序路徑(jar存在的位置),而不是當前用戶路徑(正在調用的地方)。在java中獲取當前用戶的路徑而不是應用程序路徑

所以,當這是RAN:

File file = new File("."); 
System.out.println(file.getCanonicalPath()); 

給我的應用程序中存在的路徑

但是,當我創建一個單獨的小應用程序,並使用相同的代碼。從另一個目錄調用jar,它會給出當前的用戶路徑。

我正在使用JSAP命令行解析器作爲命令行參數,其作用方式與此相同。這怎麼解決?我想讓我的大應用程序獲取當前的用戶路徑,而不是應用程序路徑。

什麼會導致他們表現不同?

+0

通過path_你指的是位置_current用戶,從用戶那裏他叫'Java的罐子./path/to/啓動您的應用程序,即應用程序/ app.jar'? – Baz

+0

是的,我想要用戶調用jar文件的目錄。它似乎在一個小型的獨立應用程序中工作。不是大的應用程序,即使我將代碼插入到應用程序主體的第一行。 – user724535

回答

3

我想你會發現,這將啓動您的「大應用程序的批處理文件(/ shell腳本) 「在啓動Java之前將目錄切換到主jar文件的目錄,這就是爲什麼當大應用程序返回jar文件的目錄時,您的簡單測試應用程序返回用戶的工作目錄爲new File(".")

嘗試在批處理文件的早期存儲用戶的CWD,然後將它傳遞到Java:

set savedcwd=%cd% 
... later on ... 
java "-Dsavedcwd=%savedcwd%" 

然後在您的應用程序

​​
+0

你是對的,你知道它是否可以更改批處理文件,使其行爲就像應用程序直接從用戶目錄調用而不是批處理文件所在的位置?我使用的命令行解析器,我沒有代碼。文件路徑用在許多不同的命令行參數中,位於不同的位置。我不想更改任何Java代碼。 – user724535

+2

爲什麼批處理文件將目錄更改爲jar文件的目錄可能有一個原因。如果您將批處理文件更改爲不將目錄更改爲jar文件的目錄,那麼您可能會破壞別的東西。現在是一個更容易解決的問題:需要'''''== Current_Working_Directory的Java代碼或者需要''。'''== Main_JAR_dir的批處理文件/ Java代碼。 '''''不能一次指向兩件事。它是一個或另一個。另外AFAIK在JVM啓動後不能改變''。「'的值,它需要在'java'運行之前通過.bat/.sh('cd')進行設置。 –

+0

我只是再次看到這個問題,我無法找到目錄在shell腳本中被更改的位置。對不起,這對我來說是全新的,試圖學習!感謝您的幫助! – user724535

1
String currentDir = new File(".").getAbsolutePath(); 
OR 
System.getProperty("user.dir") 
+0

getAbsolutePath();給了我相同的路徑。 – user724535

相關問題