Чем отличается FileInputStream от InputStream?

169
09 октября 2018, 09:00

В данном случае мне надо достать значения из файла .properties. Я могу использовать для этого FileInputStream:

FileInputStream fis = new FileInputStream("src/main/resources/config.properties");

А могу обычный InputStream:

 InputStream inputStream = getClass().getClassLoader().getResourceAsStream("src/main/resources/initialData.properties");

В чем между ними разница?

Answer 1

FileInputStream - это поток ввода из файла, а InputStream - это просто поток ввода, откуда угодно. Но в вашем примере разница не в уровне абстракции потоков, а в способе доступа к ресурсам. В случае использования FileInputStream("src/main/resources/config.properties") вы сможете читать файл только в том случае, если в рабочем каталоге вашего приложения обязательно есть каталог src с соответствующими подкаталогами, содержащими необходимый файл. Что перестанет быть истинной после упаковки приложения в jar-файл. По крайней мере без дополнительных манипуляций с вашей стороны. Использование же getResourceAsStream позволит получить данные как из файла в каталоге, так и из jar-файла. Только путь придётся поменять с src/main/resources/initialData.properties на просто initialData.properties. Подробнее об именовании ресурсов можно почитать здесь.

READ ALSO
Не распознает тэг <c:set /> в JSP странице

Не распознает тэг <c:set /> в JSP странице

Имеется jsp страница со следующей частью кода:

153
Cannot parse &ldquo;2018 6 31 18 27 &rdquo;: Value 31 for dayOfMonth must be in the range [1,30]

Cannot parse “2018 6 31 18 27 ”: Value 31 for dayOfMonth must be in the range [1,30]

Как бороться с такой ошибкой? При выборе 31 числа на месяц назад или вперёдЯ ставлю на диалоге даты 31 октября, а ошибка на сентябрь идёт

170