Это переписывание большого сообщения @Kay, которое бросает IOException и обеспечивает ранний выход:
/**
* Gets image dimensions for given file
* @param imgFile image file
* @return dimensions of image
* @throws IOException if the file is not a known image
*/
public static Dimension getImageDimension(File imgFile) throws IOException {
int pos = imgFile.getName().lastIndexOf(".");
if (pos == -1)
throw new IOException("No extension for file: " + imgFile.getAbsolutePath());
String suffix = imgFile.getName().substring(pos + 1);
Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
while(iter.hasNext()) {
ImageReader reader = iter.next();
try {
ImageInputStream stream = new FileImageInputStream(imgFile);
reader.setInput(stream);
int width = reader.getWidth(reader.getMinIndex());
int height = reader.getHeight(reader.getMinIndex());
return new Dimension(width, height);
} catch (IOException e) {
log.warn("Error reading: " + imgFile.getAbsolutePath(), e);
} finally {
reader.dispose();
}
}
throw new IOException("Not a known image file: " + imgFile.getAbsolutePath());
}
Я думаю, что мой репутатор недостаточно высок, чтобы мой вклад считался достойным ответ.
Небольшая ревизия ответа @fivetenwill, который работает для меня в Spring Boot 1.4.3.RELEASE:
foo:
"[bar.com]":
a: b
"[baz.com]":
a: c
Вам нужны скобки, которые должны быть внутри кавычек, в противном случае парсер YAML в основном отбрасывает их до того, как они доберутся до Весны, и они не попадают в название свойства.
Это должно работать:
foo:
["bar.com"]:
a: b
["baz.com"]:
a: c
Вдохновленный из Связывание конфигурации загрузки Spring Wiki
Это невозможно, если вы хотите автоматическое сопоставление ключей yaml с атрибутами Java bean. Причина в том, что Spring сначала конвертирует YAML в формат свойств. См. Раздел 24.6.1 ссылки ниже:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Итак, ваш YAML преобразуется в:
foo.bar.com.a=b
foo.baz.com.a=c
Выше ключи анализируются как стандартные свойства.
Как работа, вы может использовать Spring YamlMapFactoryBean
для создания карты Yaml. Затем вы можете использовать эту карту для создания Java-компонентов по своему усмотрению.
@Configuration
public class Config {
private Map<String, Object> foo;
@Bean
public Map<String, Object> setup() {
foo = yamlFactory().getObject();
System.out.println(foo); //Prints {foo={bar.com={a=b}, baz.com={a=c}}}
return foo;
}
@Bean
public YamlMapFactoryBean yamlFactory() {
YamlMapFactoryBean factory = new YamlMapFactoryBean();
factory.setResources(resource());
return factory;
}
public Resource resource() {
return new ClassPathResource("a.yaml"); //a.yaml contains your yaml config in question
}
}