9

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
  • If you have the source code to the third party library, you could modify it. Just make sure you know what you're doing. Commented Sep 13, 2010 at 21:53

3 Answers 3

10

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

Sign up to request clarification or add additional context in comments.

4 Comments

What about using RandomAccessFile?
This doesn't extend File or so. Live with it (and blame those 3rd party API authors for such a flawed API, best what you can try is posting a bug report at their issuetracker).
Correct, and the java.io.File object is merely an abstract representation of the path. I have decompiled and updated third party libraries for less, but you should be able to get away with writing a file with a GUID name to a tmp directory and then passing that path on.
Not quite... it also has some useful functionality to return a URL or URI which could be leveraged... See my answer below.
3

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!

Comments

0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.