Я разработал простое приложение, используя Sparkjava. Я использую Intellij, и когда я запускаю свои тесты или запускаю приложение локально, все мои ресурсы являются файлами.Есть ли более простой способ читать * .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? Независимо от того, находятся ли ресурсы в каталоге, который находится в пути к классам или в банке, которая находится в пути к классам, не имеет значения для вашего кода. –
http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29 –