Creating a File from byte array

2020-02-12 05:31发布

问题:

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)?

回答1:

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).



回答2:

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!



回答3:

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.