测试应用程序是否在 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());
}
所以我一直在做一些研究,并找到了解决我的问题的 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());
}