4

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

类型 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);

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

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

4

4 回答 4

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()。在此处查看有关此方法的更多信息和一些可能的问题:如何获取正在运行的 JAR 文件的路径?
于 2012-12-27T11:56:25.453 回答
3

这是因为当您从主类执行时,一切都很好,但是此代码在服务器上运行,它会查看当前目录,并且当前目录结构是 Apache 'bin' 从您启动服务器的位置(run.bat)。

于 2012-12-27T06:09:02.390 回答
2

你可以使用这个代码

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

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

于 2012-12-27T06:52:34.263 回答
0

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

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

于 2012-12-27T07:19:21.977 回答