So - I've got a third party library that needs a File
as input. I've got a byte array
.
I don't want to write the bytes to disk .. I'd like to keep this in memory. Any idea on how I can create a File
from the provided byte array
(without writing to disk)?
Sorry, not possible. A File is inherently an on-disk entity, unless you have a RAM disk - but that's not something you can create in Java.
That's exactly the reason why APIs should not be based on File objects (or be overloaded to accept an InputStream).
There's one possibility, but it's a real long-shot.
If the API uses new FileReader(file)
or new FileInputStream(file)
then you're hosed, but...
If it converts the file to a URL or URI (using toURL()
or toURI()
) then, since File
is not final, you can pass in a subclass of File
in which you control the construction of the URL/URI and, more importantly, the handler.
But the chances are VERY slim!
So I see there is an accepted answer (and this is old), but I found a way to do this. I was using the IDOL On Demand API and needed to convert a byte array
to a File
.
Here is an example of taking a byte array
of an image and turning into a 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);
And so outputfile
is a File
that can be used later in your program.