【问题标题】:Dynamically finding the destination of the project动态查找项目的目的地
【发布时间】:2013-10-08 23:12:57
【问题描述】:

我可以使用:

getClass().getClassLoader().getResource("").getPath());

动态获取我项目中Class文件的路径。

但我需要动态获取项目主目录的路径。我不能像这样静态地这样做:

文件 file = new File("C:\Users\etc...");

因为项目的目标可以从一台计算机更改为下一台计算机。我需要调用项目主目录中的一个文件。我如何动态地做到这一点。这将类似于我在这个问题开始时的做法,但它不能只针对类。

有什么想法吗?

【问题讨论】:

  • 为什么不使用您之前的策略为您的类创建路径字符串,然后将其用作 File 构造函数的输入?
  • 您的项目的主目录在运行时不存在。你是说安装目录吗?说一个网络应用?

标签: java


【解决方案1】:

Java 中没有“java 项目”这样的东西。如果您知道您的类文件与您要查找的任何目录的关系,您可以使用您在第一个示例中获得的路径:

Url classUrl = ...
File resourcePath = new File(classUrl.toUri());
File rootDir = resourcePath.getParentFile().getParentFile().getParentFile();

File rootDir = new File(resourcePath.getPath() + 
    "/../../../".replace("/", File.separatorChar));

当然,这只有在文件实际在文件系统上时才有效;如果它们在 jar 中,则需要找到 jar 文件。

但这通常不是你想做的事情。通过将沙箱作为命令行参数或环境变量传递给您的应用程序,为您的应用程序配置沙箱是一种更好的做法。在某些情况下,使用预定义的系统属性(例如 user.homeuser.dirjava.io.tmpdir)也很有用。

【讨论】:

  • 之所以这样,我正在创建一个 java swing GUI,并且在这个项目中它将有一个 HelpMaker 项目(这是一个 .chm 文件...例如:HelpMaker.chm)它需要指向。我正在尝试在清理和构建 java swing 项目后找出一种方法,它将能够成功指向该文件。你能想出更好的方法吗?
  • 同样,Java 中没有“项目”这样的概念。这听起来像是一个特定的 IDE 术语。如果您只是尝试访问特定文件,则可以确保它位于类路径中,并使用 ClassLoader.getResource() 方法显式引用它,就像您之前描述的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多