Reputation: 3021
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)?
Upvotes: 9
Views: 10507
Reputation: 8588
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.
Upvotes: 0
Reputation: 18998
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!
Upvotes: 3
Reputation: 346566
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).
Upvotes: 10