如何在java中获取当前目录?

时间:2012-12-27 06:03:35

标签: java linux java-ee struts2 directory

我正在尝试从java获取我的Project的当前目录。我使用以下代码行来获取路径详细信息。

类型1:

File directory = new File (".");
try {
    System.out.println ("Current directory's canonical path: " 
            + directory.getCanonicalPath()); 
    System.out.println ("Current directory's absolute  path: " 
                + directory.getAbsolutePath());
}catch(Exception e) {
    System.out.println("Exceptione is ="+e.getMessage());
}

类型2:

String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);

从主类执行上述代码时,我正在获取项目目录。当我从服务器端执行时,得到“当前dir使用System:D:\ Apache Tomcat 6.0.16 \ bin”。但我的项目位于D:\Apache Tomcat 6.0.16\wepapps\SampleStructs

请给我任何建议,并帮助我解决这个问题。

4 个答案:

答案 0 :(得分:7)

首先,问题的主要原因是当前工作目录与可执行文件的位置之间的差异。您应该知道Linux中的当前工作目录不是可执行文件所在的目录,而是启动程序的当前目录。

举个例子,假设您有一个程序current打印出当前目录,它位于/home/user/scripts/

如果你这样做:

cd /home/user/scripts
./current

会打印出来:/home/user/scripts/ 但是,如果你这样做:

cd /home/user/
scripts/current

输出结果为:/home/user/

关于可能的解决方案,我发现其中一些有用的是:

  • 请参阅相对于类路径的项目资源,有关详细信息,请参阅ClassLoader.getResourceAsStream()
  • 请参阅相对于用户主目录的配置资源,如属性文件等。
  • 将所有其他位置(例如媒体目录路径等)放在上面的配置文件中。
  • 如果所有其他选项都不可用或实际使用getClass().getProtectionDomain().getCodeSource().getLocation().getPath()。请在此处详细了解此方法和一些可能的问题:How to get the path of a running JAR file?

答案 1 :(得分:3)

因为当你从主类执行时一切都很好,但是这个代码在服务器上运行,它查看当前目录,当前目录结构是Apache'bin',你从那里启动服务器(run.bat)。 / p>

答案 2 :(得分:2)

您可以使用此代码

String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));

这段代码以前对我有用! 它将返回windows或linux中文件夹的完整路径。

答案 3 :(得分:0)

我们在这里讨论不同的背景。 1.以独立模式运行应用程序。 2.在服务器端的容器中运行应用程序。 在#1中,应用程序从它调用的目录运行。

但#2情况下,应用程序是相对于容器运行的,因此您可以看到服务器目录的位置。这也屏蔽了应用程序代码。