Вместо этого используйте ClassLoader#getResource()
, если его URI представляет допустимый путь к файловой системе локального диска.
URL resource = classLoader.getResource("resource.ext");
File file = new File(resource.toURI());
FileInputStream input = new FileInputStream(file);
// ...
Если это не так (например, JAR), тогда лучше всего делатьскопировать его во временный файл.
Path temp = Files.createTempFile("resource-", ".ext");
Files.copy(classLoader.getResourceAsStream("resource.ext"), temp, StandardCopyOption.REPLACE_EXISTING);
FileInputStream input = new FileInputStream(temp.toFile());
// ...
Тем не менее, я действительно не вижу никакой выгоды от этого, или это должно требоваться плохим вспомогательным классом / методом, который вместо этого требует FileInputStream
InputStream
.Если вы можете, просто исправьте API, чтобы запросить InputStream
.Если это сторонний, непременно сообщите об этом как об ошибке.В этом конкретном случае я бы также поставил вопросительные знаки вокруг оставшейся части этого API.