Reputation: 354
I have a method that takes in a byte[]
that came from Files.readAllBytes()
in a different part of the code for either .txt or .docx files. I want to create a new File
object from the bytes to later read contents from, without saving that file to disk. Is this possible? Or is there a better way to get the contents from the File bytes?
Upvotes: 3
Views: 12276
Reputation: 103913
That's not how it works. a java.io.File
object is a light wrapper: Check out the source code - it's got a String
field that contains the path and that is all it has aside from some bookkeeping stuff.
It is not possible to represent arbitrary data with a java.io.File object. j.i.File
objects represent literal files on disk and are not capable of representing anything else.
Files.readAllBytes
gets you the contents from the bytes, that's.. why the method has that name.
The usual solution is that a method in some library that takes a File is overloaded; there will also be a method that takes a byte[]
, or, if that isn't around, a method that takes an InputStream
(you can make an IS from a byte[]
easily: new ByteArrayInputStream(byteArr)
will do the job).
If the API you are using doesn't contain any such methods, it's a bad API and you should either find something else, or grit your teeth and accept that you're using a bad API, with all the workarounds that this implies, including having to save bytes to disk just to satisfy the asinine API.
But look first; I bet there is a byte[]
and/or InputStream
variant (or possibly URL
or ByteBuffer
or ByteStream
or a few other more exotic variants).
Upvotes: 6