【问题标题】:how to get current directory in java?如何在java中获取当前目录?
【发布时间】:2012-12-12 13:47:56
【问题描述】:

我正在尝试从 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

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

【问题讨论】:

  • 项目编译完成后,您的可执行文件将被放入\Apache Tomcat 6.0.16\bin!无论项目文件夹在哪里。
  • @codeMan 确切地说,没有可执行文件,而且 Web 应用程序也不会在 \bin 中结束。

标签: java linux jakarta-ee struts2 directory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用此代码

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        首先,问题的主要原因是当前工作目录与可执行文件位置之间的差异。你应该知道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?

        【讨论】:

          猜你喜欢
          • 2011-06-19
          • 1970-01-01
          • 2010-10-26
          相关资源
          最近更新 更多