Я пытаюсь создать своего рода служебный метод для чтения текстовых файлов из ресурсов в Spring Boot.Чтобы прочитать файлы, я смотрю на них как InputStream
s:
Resource resource = new ClassPathResource(fileLocationInClasspath);
InputStream resourceInputStream = resource.getInputStream();
(обратите внимание, что Resource#getInputStream
выдает IOException )
Тогда я пытаюсьиспользовать Сканер , как упомянуто в глупых хитростях сканера вместо Reader
или чего-то еще, поскольку это элегантно-простой способ сделать это.
ОднакоУ меня проблемы с избавлением от предупреждения, указанного в заголовке вопроса.Даже если я просто позвоню scanner.close()
(до java-8 way), предупреждение останется.
Попытка № 1 (первое посещение):
public static String readFileFromResources(String fileName) throws IOException {
try (Scanner sc = new Scanner(new ClassPathResource(fileName).getInputStream()).useDelimiter("\\A")) {
return sc.next();
}
}
Попытка № 2:
public static String readFileFromResources(String fileName) throws IOException {
Scanner sc = new Scanner(new ClassPathResource(fileName).getInputStream()).useDelimiter("\\A");
String text = sc.next();
sc.close();
return text;
}
Попробуйте # 3 (предупреждение исчезнет):
public static String readFileFromResources(String fileName) throws IOException {
try (Scanner sc = new Scanner(new ClassPathResource(fileName).getInputStream()).useDelimiter("\\A")) {
return sc.next();
} catch (Exception e) // Note Exception class
{
throw new IOException(e); //Need to catch this later
}
}
Может кто-нибудь объяснить, почему попытка # 1 и попытка # 2 выдает предупреждение?Я думаю try # 3 нет, потому что мы перехватываем все возможные исключения.Но единственное исключение, которое может быть выброшено, - это метод IOException
из getInputStream()
.Если Scanner
является подозрительным для какого-либо исключения, почему оно не заставляет нас ловить это исключение?В конце концов, перехват исключений с использованием Exception
не рекомендуется.
Наконец, я подумал, может быть, это проблема STS (Spring tool suite)?
(Если это играет какую-либо роль,> Версия JDK: 1.8.0_191)