байт [] для файла в Java - PullRequest
       15

байт [] для файла в Java

280 голосов
/ 04 декабря 2010

С Java:

У меня есть byte[], который представляет файл.

Как мне записать это в файл (то есть. C:\myfile.pdf)

Я знаю, что это сделано с InputStream, но я не могу решить это.

Ответы [ 12 ]

431 голосов
/ 04 декабря 2010

Используйте Apache Commons IO

FileUtils.writeByteArrayToFile(new File("pathname"), myByteArray)

Или, если вы настаиваете на том, чтобы сделать работу для себя ...

try (FileOutputStream fos = new FileOutputStream("pathname")) {
   fos.write(myByteArray);
   //fos.close(); There is no more need for this line since you had created the instance of "fos" inside the try. And this will automatically close the OutputStream
}
165 голосов
/ 11 июня 2013

Без библиотек:

try (FileOutputStream stream = new FileOutputStream(path)) {
    stream.write(bytes);
}

С Google Guava :

Files.write(bytes, new File(path));

С Apache Commons :

FileUtils.writeByteArrayToFile(new File(path), bytes);

Все эти стратегии требуют, чтобы вы также ловили IOException в какой-то момент.

97 голосов
/ 14 апреля 2015

Другое решение с использованием java.nio.file:

byte[] bytes = ...;
Path path = Paths.get("C:\\myfile.pdf");
Files.write(path, bytes);
32 голосов
/ 29 февраля 2016

Также начиная с Java 7, одна строка с java.nio.file.Files:

Files.write(new File(filePath).toPath(), data);

Где data - ваш байт [], а filePath - строка. Вы также можете добавить несколько вариантов открытия файлов с помощью класса StandardOpenOptions. Добавьте броски или окружите с помощью try / catch.

18 голосов
/ 03 апреля 2014

Начиная с Java 7 и далее, вы можете использовать оператор try-with-resources , чтобы избежать утечки ресурсов и облегчить чтение кода. Подробнее об этом здесь .

Чтобы записать свой byteArray в файл, вы должны сделать:

try (FileOutputStream fos = new FileOutputStream("fullPathToFile")) {
    fos.write(byteArray);
} catch (IOException ioe) {
    ioe.printStackTrace();
}
4 голосов
/ 04 декабря 2010

Попробуйте OutputStream или более конкретно FileOutputStream

2 голосов
/ 29 марта 2017
File f = new File(fileName);    
byte[] fileContent = msg.getByteSequenceContent();    

Path path = Paths.get(f.getAbsolutePath());
try {
    Files.write(path, fileContent);
} catch (IOException ex) {
    Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
}
2 голосов
/ 04 декабря 2010

Я знаю, что это сделано с InputStream

На самом деле, вы будете записывать в файл с выводом ...

1 голос
/ 27 августа 2017

Вы можете попробовать Cactoos :

new LengthOf(new TeeInput(array, new File("a.txt"))).value();

Подробнее: http://www.yegor256.com/2017/06/22/object-oriented-input-output-in-cactoos.html

1 голос
/ 29 марта 2017

////////////////////////// 1] Файл в байт [] //////////////// /////

Path path = Paths.get(p);
                    byte[] data = null;                         
                    try {
                        data = Files.readAllBytes(path);
                    } catch (IOException ex) {
                        Logger.getLogger(Agent1.class.getName()).log(Level.SEVERE, null, ex);
                    }

/////////////////////// 2] Байт [] в файл ///////////////////// //////////

 File f = new File(fileName);
 byte[] fileContent = msg.getByteSequenceContent();
Path path = Paths.get(f.getAbsolutePath());
                            try {
                                Files.write(path, fileContent);
                            } catch (IOException ex) {
                                Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
                            }
...