public Properties getProperties(String fileName) throws Exception {
Path path1 = Paths.get(fileName);
Properties prop = new Properties();
InputStream inputStream = Files.newInputStream(path1);
try {
prop.loadFromXML(inputStream);
} catch (IOException e) {
try {
prop.load(inputStream);
} catch (Exception ex) {
return prop;
}
}
return prop;
}
Изначально делал такой вариант - валидацию не прошел, ибо:
Метод getProperties должен корректно считывать свойства из любого другого файла с любым расширением.
Метод getProperties должен возвращать пустой объект, если во время чтения свойств возникла ошибка.
Подскажите, пожалуйста, почему ?
ilya
35 уровень
Вопросик
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Roman Pryshchepa Java Developer Expert
19 декабря 2017, 08:50
Переделай так, чтобы метод getProperties не кидал исключение (зачем ты добавил throws Exception?)
0
ilya
19 декабря 2017, 08:57
Сделал так - не помогло.
ЗЫ. В инпут стриме кидалось IOException, почему-то решил дальше передать. косяк.
0
Roman Pryshchepa Java Developer Expert
19 декабря 2017, 09:17
Ты пользуешься IDEA?
Она сообщает, что в этой строке "prop.loadFromXML(inputStream);" inputStream может быть null, т.е. мы получим NullPointerException, а ты его не отлавливаешь.
0
ilya
19 декабря 2017, 09:41
Теперь не прохожу только по последнему пункту: Метод getProperties должен корректно считывать свойства из любого другого файла с любым расширением.
0
Roman Pryshchepa Java Developer Expert
19 декабря 2017, 12:20решение
У тебя, если файл не xml, в строке
происходит попытка работы с inputStream и это его изменяет. Поэтому в строку
приходит уже не тот inputStream, который получили из файла.
Вообще в условии сказано про расширения файлов, т.е. в идеале берем расширение и проверяем на xml (if, else).
+3
ilya
19 декабря 2017, 23:49
Такой код прошел - правда, не уверен, что в реальности так можно делать.
Прада твоя - решать эстетичней через сабстринг.
P.S, Можно, пожалуйста, подробней - что изменится в объекте inputStream ?
+2
Roman Pryshchepa Java Developer Expert
20 декабря 2017, 08:59
Например, если в нем было 5 байт, а ты один вычитал, то останется 4.
0
ilya
20 декабря 2017, 09:04
Спасибо!
0