Как преобразовать InputStream в FileInputStream - PullRequest
56 голосов
/ 01 марта 2010

В моей программе есть эта строка:

InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");

Но как мне получить FileInputStream от него [Resource_InputStream]?

Ответы [ 3 ]

61 голосов
/ 01 марта 2010

Вместо этого используйте 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());
// ...

Тем не менее, я действительно не вижу никакой выгоды от этого, или это должно требоваться плохим вспомогательным классом / методом, который вместо этого требует FileInputStreamInputStream.Если вы можете, просто исправьте API, чтобы запросить InputStream.Если это сторонний, непременно сообщите об этом как об ошибке.В этом конкретном случае я бы также поставил вопросительные знаки вокруг оставшейся части этого API.

12 голосов
/ 01 марта 2010

Короче говоря: Не используйте FileInputStream в качестве параметра или типа переменной. Вместо этого используйте абстрактный базовый класс, в данном случае InputStream.

0 голосов
/ 29 мая 2014

Вам нужно что-то вроде:

    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, а не в работающем JAR.Мне объяснили ту же проблему здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...