【发布时间】:2010-10-21 03:52:42
【问题描述】:
是否可以从 main 中获取包含我的 main 函数的 .class 文件的路径?
【问题讨论】:
-
您的意思是您想知道 .class 文件在文件系统上的位置吗?
是否可以从 main 中获取包含我的 main 函数的 .class 文件的路径?
【问题讨论】:
【讨论】:
main 方法中,封闭类是已知的。
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 中。
【讨论】:
你需要它做什么?如果您需要它来获取同一目录中的任何文件,这就是 Class.getResourceAsStream() 的用途。
【讨论】:
在我看来,这更像是最终用户的问题。还要考虑可能需要运行任何给定应用程序的多个实例,阻止用户这样做将成为一个主要的烦恼。
如果问题出在临时文件冲突上,那么只需确保所有临时文件的名称都是唯一的。据我了解,这是人们认为需要阻止其应用程序的多个实例运行的最常见原因。
P.S.:java.io.File.createTempFile() 方法非常适合防止临时文件冲突,因为它们会自动生成唯一的文件名。
【讨论】: