WAR (Web Archive) — это приложение JavaEE, упакованное в архив и готовое для разворачивания на сервере приложений. В этом файле находятся классы приложения, ресурсные файлы и служебные файлы. Как быть, если вам требуется прочитать файл ресурсов из этого приложения?
Какие файлы можно прочитать из WAR архива
Можно прочитать те файлы, которые в архиве расположены в директории WEB-INF/classes
Как прочитать файл ресурсов из архива WAR
Для того, чтобы прочитать контент ресурсного файла из war архива, сначала требуется получить InputStream этого файла:
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
Если вернувшийся объект не равен null, остаётся вычитать контент любым удобным способом. Например, таким:
StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } System.out.println(sb.toString());
Исходный код
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ReadFileFromWarArchive { public static void main(String[] args) { System.out.println(resourceToString("git.properties")); } public static String resourceToString(String path) { if (path == null) { return null; } InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path); if (in == null) { return null; } StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } System.out.println(sb.toString()); return sb.toString(); } }
Заключение
Довольно просто вычитать контент ресурсного файла с помощью метода getResourceAsStream и последующей вычиткой контента из полученного InputStream.