Подтвердить что ты не робот

Преобразование файла в байтовый массив и наоборот

Я нашел много способов преобразования файла в массив байтов и записи байтового массива в файл на диске.

Я хочу преобразовать java.io.File в массив байтов, а затем преобразовать массив байтов в java.io.File.

Я не хочу записывать его на хранение следующим образом:

//convert array of bytes into file
FileOutputStream fileOuputStream = new FileOutputStream("C:\\testing2.txt"); 
fileOuputStream.write(bFile);
fileOuputStream.close();

Я хочу как-то сделать следующее:

File myFile = ConvertfromByteArray(bytes);
4b9b3361

Ответ 1

Я думаю, вы неправильно поняли, что класс java.io.File действительно представляет. Это просто представление файла в вашей системе, то есть его имя, его путь и т.д.

Вы даже посмотрели на Javadoc для класса java.io.File? Посмотрите здесь Если вы проверите поля, которые у него есть, или методы или аргументы конструктора, вы сразу получите подсказку о том, что все, что есть, является представлением URL/пути.

Oracle предоставляет довольно обширный учебник в учебном пособии Java File I/O с новейшей функциональностью NIO.2.

С NIO.2 вы можете прочитать его в одной строке, используя java.nio.file.Files.readAllBytes().

Аналогично вы можете использовать java.nio.file.Files.write() для записи всех байтов в вашем массиве байтов.

UPDATE

Поскольку вопрос связан с Android, более традиционным способом является обернуть FileInputStream в BufferedInputStream, а затем обернуть его в ByteArrayInputStream. Это позволит вам прочитать содержимое в byte[]. Аналогично, их эквиваленты существуют для OutputStream.

Ответ 2

В противном случае Попробуйте следующее:

Преобразование файла в байты

  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  import java.io.IOException;


   public class Temp {

        public static void main(String[] args) {

         File file = new File("c:/EventItemBroker.java");

         byte[] b = new byte[(int) file.length()];
         try {
               FileInputStream fileInputStream = new FileInputStream(file);
               fileInputStream.read(b);
               for (int i = 0; i < b.length; i++) {
                           System.out.print((char)b[i]);
                }
          } catch (FileNotFoundException e) {
                      System.out.println("File Not Found.");
                      e.printStackTrace();
          }
          catch (IOException e1) {
                   System.out.println("Error Reading The File.");
                    e1.printStackTrace();
          }

       }
    }

Преобразование байтов в файл

      public class WriteByteArrayToFile {

         public static void main(String[] args) {

            String strFilePath = "Your path";
            try {
                 FileOutputStream fos = new FileOutputStream(strFilePath);
                 String strContent = "Write File using Java ";

                 fos.write(strContent.getBytes());
                 fos.close();
           }
          catch(FileNotFoundException ex)   {
                 System.out.println("FileNotFoundException : " + ex);
          }
         catch(IOException ioe)  {
                 System.out.println("IOException : " + ioe);
          }

       }
     }

Ответ 3

Вы не можете этого сделать. A File является абстрактным способом ссылки на файл в файловой системе. Он не содержит самого содержимого файла.

Если вы пытаетесь создать файл в памяти, на который можно ссылаться с помощью объекта File, вы не сможете это сделать, как описано в этот поток, этот поток и многие другие места.

Ответ 4

Apache FileUtil предоставляет очень удобные методы для преобразования

try {
    File file = new File(imagefilePath);
    byte[] byteArray = new byte[file.length()]();
    byteArray = FileUtils.readFileToByteArray(file);  
 }catch(Exception e){
     e.printStackTrace();

 }

Ответ 5

Нет такой функциональности, но вы можете использовать временный файл File.createTempFile().

File temp = File.createTempFile(prefix, suffix);
// tell system to delete it when vm terminates.
temp.deleteOnExit();

Ответ 6

Вы не можете сделать это для файла, который является главным образом интеллектуальным пути к файлу. Можете ли вы реорганизовать свой код так, чтобы он объявлял переменные и проходил вокруг аргументов, с типом OutputStream вместо FileOutputStream? Если это так, см. Классы java.io.ByteArrayOutputStream и java.io.ByteArrayInputStream

OutputStream outStream = new ByteArrayOutputStream();
outStream.write(whatever);
outStream.close();
byte[] data = outStream.toByteArray();
InputStream inStream = new ByteArrayInputStream(data);
...