测试应用程序是否在 Java 中的 jar 文件中 运行

Test if application is running in a jar file in Java

所以我一直在做一些研究,并找到了解决我的问题的 hackish 解决方案,即:如何确定我在源文件夹中加载的资源是否是从 jar 文件中提取的,或者在 Netbeans 自动配置的构建目录中?

这是我目前的发现: 我注意到如果我使用

加载项目中的文件
File file = this.getClass().getClassLoader().getResource(somefile.txt);

的调用
System.out.println(File.getPath());

将向控制台输出如下内容:

jar:path/to/file.txt

我可以在其中使用 String 函数进行测试

path.contains("jar");

获取一个布尔值,似乎可以告诉我资源是否在 jar 文件中。

我想我的问题是是否有更好的解决方案,或者这是执行此操作的首选方法吗?

我乐于接受建议或任何答案

ClassLoader.getResource(String) returns 一个 URL,没有文件。而不是将其转换为字符串并使用 String.contains() 调用,您应该检查 getProtocol() 方法 returns:

URL url = this.getClass().getClassLoader().getResource("/somefile.txt");
if(null != url){    
    System.out.println(url.getProtocol());
}