How to get a file name from a file's byte array?

20,343

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.

Share:
20,343
E.S.
Author by

E.S.

Updated on September 12, 2020

Comments

  • E.S.
    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:

    1. I start out with a File on machine A
    2. I use FileUtils to turn the file into a byte array
    3. I transmit that file over a network to machine B
    4. On machine B, I want to reconstruct that byte[] into a File and run methods such as getName()

    The following does not work

    1. (File) bytes --> Does not convert
    2. ((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
      NormR over 10 years
      Does FileUtils output data about the file and/or the file's contents?
    • E.S.
      E.S. over 10 years
      FileUtils 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
      Kevin over 10 years
      You have to send the name/path/etc. across the network along with the bytes.
    • E.S.
      E.S. over 10 years
      @Kevin isn't the file name information stored in the byte[] though?
    • Kevin
      Kevin over 10 years
      No. 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.
      E.S. over 10 years
      My mistake then. For some reason I thought the file name was there. Appreciate the clarification everyone, I will program a workaround :)