У меня есть эта строка в моей программе:
InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");
Но как я могу получить FileInputStream из него [Resource_InputStream]?
У меня есть эта строка в моей программе:
InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");
Но как я могу получить FileInputStream из него [Resource_InputStream]?
Используйте 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.
Короче говоря: Не используйте FileInputStream как параметр или тип переменной. Используйте абстрактный базовый класс, в этом случае InputStream.
Вам нужно что-то вроде:
URL resource = this.getClass().getResource("/path/to/resource.res");
File is = null;
try {
is = new File(resource.toURI());
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileInputStream input = new FileInputStream(is);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Но он будет работать только в вашей среде IDE, а не в runnable JAR. У меня возникла такая же проблема здесь.