How to get a file name from a file's byte array?
Solution 1
The byte[]
that is returned by FileUtils.readFileToByteArray
is only the file contents, nothing else.
You should create your own class that is Serializable that includes two fields: a byte[]
for the file contents, and a java.io.File
that has everything else you need. You then serialize/deserialize your class into byte[]
, which is transmitted.
Solution 2
The file contents and its name are two separate and independent things. While a specific file format could have metadata to store the name in the contents (similar to e.g. ID3 tags for MP3), in a typical file there is no way to know the name from byte [] contents
. Also even if, it would be the name from a remote machine which may be invalid on the target platform.
If you want the name you need to transfer it separately.
E.S.
Updated on September 12, 2020Comments
-
E.S. over 3 years
I have the bytes representing a file that I am transmitting over a network. Besides reconstructing the file manually on the file system, how can I get the information from the File, such as getName(), getPath(), etc?
In other words:
- I start out with a File on machine A
- I use FileUtils to turn the file into a byte array
- I transmit that file over a network to machine B
- On machine B, I want to reconstruct that byte[] into a File and run methods such as getName()
The following does not work
- (File) bytes --> Does not convert
- ((File) ((Object) bytes))) --> Does not convert either
I would really rather not create a new temporary file on the filesytem, although I know there are static File.createTemp available that will do that. I'd prefer to just keep it in memory, construct a new File object from the byte[] array, get the information I Need and be done.
Actually, what would be even better is an API that will take the byte[] and from it, directly get the file name by parsing the bits.
-
NormR over 10 yearsDoes FileUtils output data about the file and/or the file's contents?
-
E.S. over 10 yearsFileUtils will dump the byte[] into an actual File, on the File System itself. But, I just want to access the File from memory. I.e., just grab the .getName() contents. See FileUtils.writeByteArrayToFile(file, data);
-
Kevin over 10 yearsYou have to send the name/path/etc. across the network along with the bytes.
-
E.S. over 10 years@Kevin isn't the file name information stored in the byte[] though?
-
Kevin over 10 yearsNo. The byte[] has the contents of the file, no more, no less. Well, maybe less if there's a problem reading. It's no different from any other byte[].
-
E.S. over 10 yearsMy mistake then. For some reason I thought the file name was there. Appreciate the clarification everyone, I will program a workaround :)