Ответ 1
Используйте 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.