【问题标题】:Getting directory path to .class file containing main获取包含 main 的 .class 文件的目录路径
【发布时间】:2010-10-21 03:52:42
【问题描述】:

是否可以从 main 中获取包含我的 main 函数的 .class 文件的路径?

【问题讨论】:

  • 您的意思是您想知道 .class 文件在文件系统上的位置吗?

标签: java file path


【解决方案1】:

根据http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html,没有。不过,我建议阅读$0 (Program Name) in Java? Discover main class?,它至少为您提供了主要课程。

【讨论】:

  • main 方法中,封闭类是已知的。
【解决方案2】:
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
  throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());

请注意,大多数类文件都组装成 JAR 文件,因此这并非在所有情况下都有效(因此是 IllegalStateException)。但是,您可以使用此技术找到包含该类的 JAR,并且您可以通过调用 getResourceAsStream() 代替 getResource() 来获取类文件的内容,无论该类是否在文件系统或 JAR 中。

【讨论】:

    【解决方案3】:

    你需要它做什么?如果您需要它来获取同一目录中的任何文件,这就是 Class.getResourceAsStream() 的用途。

    【讨论】:

    • 试图锁定我的主类文件,以便多次停止启动我的应用程序。
    【解决方案4】:

    在我看来,这更像是最终用户的问题。还要考虑可能需要运行任何给定应用程序的多个实例,阻止用户这样做将成为一个主要的烦恼。

    如果问题出在临时文件冲突上,那么只需确保所有临时文件的名称都是唯一的。据我了解,这是人们认为需要阻止其应用程序的多个实例运行的最常见原因。

    P.S.:java.io.File.createTempFile() 方法非常适合防止临时文件冲突,因为它们会自动生成唯一的文件名。

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2015-11-01
      • 2022-01-16
      • 2011-12-22
      • 2013-11-12
      相关资源
      最近更新 更多