Чтение файлов из приложения Spring Boot возможно через Java 8 NIO API. В этой статье показано, как читать файлы из папки ресурсов в приложении Spring Boot, которое выполняется как отдельное приложение или внутри контейнера Docker.
Вам также может понравиться: Работа с ресурсами весной
Создать проект
Создайте проект Gradle или Maven с помощью Spring Initializer . Создайте папку и файлы внутри папки ресурсов по мере необходимости.
Создать псевдо файловую систему
Мы пытаемся прочитать содержимое папки метафайлов из приведенной выше структуры. Нам нужно преобразовать путь к файлу в ресурс URI. Создайте новую файловую систему для ресурса URI. Поскольку FileSystem
это Closable, мы можем разместить инициализацию jarFileSystem
внутри блока try.
Джава
xxxxxxxxxx
1
public void readFolderFromJar() throws Exception {
2
String relativePath = "metafiles";
3
URI resource = getClass().getClassLoader().getResource(relativePath).toURI();
4
try (FileSystem jarFileSystem = FileSystems.newFileSystem(resource, Collections.emptyMap())) {
5
String[] jarPath = resource.toString().split("!", 2);
6
String jarReference = jarPath[1].replace("!", "");
7
readContent(jarFileSystem.getPath(jarReference));
8
}
9
}
Рекурсивно Траверс
Если путь является каталогом, то рекурсивно вызывайте readContent
функцию, пока мы не встретим отдельные файлы. Давайте использовать файлы API NIO . Списки Files.list будут лениво перечислять пути.
Джава
xxxxxxxxxx
1
public void readContent(Path path)
2
{
3
try
4
{
5
Stream<Path> list = Files.list(path);
6
List<Path> paths = list.parallel().collect(Collectors.toList());
7
paths.stream().parallel().forEach(filePath -> {
8
if (Files.isDirectory(filePath))
9
{
10
readContent(filePath);
11
}
12
else
13
{
14
try
15
{
16
String fileName = filePath.toString().split("classes")[1];
17
String content = readFile(filePath);
18
logger.debug("File: "+fileName+": Content: "+content);
19
}
20
catch (Exception e)
21
{
22
logger.error("Unable to read file " + e.getMessage());
23
}
24
}
25
});
26
}
27
catch (Exception e)
28
{
29
logger.error("Unable to read file " + e.getMessage());
30
}
31
}
32
Read content
33
Read content of files from path using Files.readAllBytes.
34
private String readFile(Path path) throws IOException
36
{
37
byte[] encoded = Files.readAllBytes(path);
38
return new String(encoded, Charset.forName("UTF-8"));
39
}
Тестовый забег
Запустите ваш проект Spring Boot, используя традиционный подход, показанный ниже. Здесь ресурсы / метафайлы будут частью «jar», и все же мы сможем прочитать содержимое этих файлов.
java -jar demo-0.0.1-SNAPSHOT.jar
Надеюсь тебе понравилось!
Дальнейшее чтение
Сделайте Spring своим шагом: учебные пособия по Spring Framework