2012-09-04 42 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

相关问题