Преобразовать InputStream в FileInputStream - PullRequest
3 голосов
/ 18 марта 2011

Я прочитал этот пост Как преобразовать InputStream в FileInputStream при преобразовании InputStream в FileInputStream.Однако ответ не работает, если вы используете ресурс, который находится в файле JAR.Есть ли другой способ сделать это.

Мне нужно сделать это, чтобы получить FileChannel от звонка на Object.class.getResourceAsStream(resourceName);

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Из InputStream, возвращенного Class.getResourceAsStream (), вы можете создать канал с Channels.newChannel (InputStream).

Это не запрашиваемый вами FileChannel, но этовсе еще канал.Достаточно ли этого для удовлетворения ваших потребностей?

6 голосов
/ 18 марта 2011

Вы не можете без основной записи в файл. Если нет файла, не может быть FileInputStream или FileChannel. Если это вообще возможно, убедитесь, что ваш код не зависит от входного источника - проектируйте его в терминах InputStream и ByteChannel (или любого типа канала, который наиболее подходит).

0 голосов
/ 18 марта 2011

Если вам действительно нужен файл, и вы знаете, что ресурс не находится внутри фляги или загружен удаленно, вы можете использовать getResource.

URL resourceLocation = Object.class.getResource(resourcePath);
if (resourceLocation == null) { throw new FileNotFoundException(resourcePath); }
File myFile = new File(resourceLocation.toURI());

Если вам абсолютно не нужно FileChannel или вы не можете делать предположения о том, как устроен ваш путь к классу, то решение Энди Томаса-Крамера, вероятно, является лучшим.

...