Создание файла из байтового массива - PullRequest
8 голосов
/ 14 сентября 2010

Итак - у меня есть сторонняя библиотека, которой требуется File в качестве входных данных.У меня есть byte array.

Я не хочу записывать байты на диск .. Я хотел бы сохранить это в памяти.Любая идея о том, как я могу создать File из предоставленного byte array (без записи на диск)?

Ответы [ 3 ]

10 голосов
/ 14 сентября 2010

Извините, не возможно. Файл по своей сути является сущностью на диске, если у вас нет RAM-диска - но это не то, что вы можете создать в Java.

Именно поэтому API не должны основываться на объектах File (или не должны быть перегружены для приема InputStream).

3 голосов
/ 14 сентября 2010

Есть одна возможность, но это очень далеко.

Если API использует new FileReader(file) или new FileInputStream(file), значит, вы попали, но ...

Если он преобразует файл в URL или URI (используя toURL() или toURI()), тогда, поскольку File не является окончательным, вы можете передать подкласс File, в котором вы управляете построением URL / URI и, что более важно, обработчик.

Но шансы ОЧЕНЬ малы!

0 голосов
/ 11 августа 2015

Итак, я вижу, что есть принятый ответ (и он старый), но я нашел способ сделать это.Я использовал API IDOL по требованию и мне нужно было преобразовать byte array в File.

Вот пример взятия byte array изображения и превращения в File:

//imageByte is the byte array that is already defined
BufferedImage image = null;
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();

// write the image to a file
File outputfile = new File("image.png");
ImageIO.write(image, "png", outputfile);

Итак, outputfile - это File, который можно использоватьпозже в вашей программе.

...