我使用Sparkjava开发了一个简单的应用程序。我使用Intellij,当我运行测试或在本地运行应用程序时,所有资源都是文件。有没有更简单的方法来读取* .jar或文件系统?
但是,当我部署时,整个事情作为一个jar文件运行。因此,我需要一种方法来从文件系统或jar中读取我的资源,具体取决于应用程序的启动方式。下面的代码可以完成工作,但看起来很笨拙:
String startedOffFile = new java.io.File(Main.class.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath())
.getName();
InputStream inputStream;
if(startedOffFile.endsWith(".jar")) {
ClassLoader cl = PropertiesParser.class.getClassLoader();
inputStream = cl.getResourceAsStream("myapp.dev.properties");
} else {
inputStream = new FileInputStream(filename);
}
是否有更清洁/更简单的方法?
对我来说很好。 –
为什么不总是从类路径加载资源(即使用ClassLoader.getResourceAsStream()),而不是使用文件IO?资源是否位于类路径中的目录中,或位于类路径中的jar中对您的代码没有影响。 –
http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29 –