desau
desau

Reputation: 3021

Creating a File from byte array

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

Answers (3)

Wyetro
Wyetro

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

dty
dty

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

Michael Borgwardt
Michael Borgwardt

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

Related Questions