2012-06-11 2 views
1

Я использую API, для которого требуется вход java.io.File, но я бы хотел просто отправить API байтовый массив. Есть ли способ создать объект File, который будет считываться из моего байтового массива, а не из диска?Построить java.io.File, который читает из массива байтов

+1

Возможный дубликат [Создание файла из массива байтов] (http://stackoverflow.com/questions/3704554/creating-a-file-from-byte-array) –

+0

@JoachimSauer не очень, поскольку связанные вопросы задают если можно записать в файл без записи на диск (какой-то виртуальный файл или так), тогда как в этом вопросе просто возникает вопрос, как писать в файл. – brimborium

+0

@brimborium: проблемы выглядят почти одинаково для меня: они * нужны * 'java.io.File', потому что это требует какой-то сторонний API, но они * имеют * байтовый массив/поток и не делают хотите сохранить его на диске (что было бы прямолинейным, но неэффективным решением). Кроме того, ответ один и тот же: нет, это невозможно. –

ответ

5

A File ничего не читает. Он представляет собой файл (или каталог) объекта в операционной системе (или виртуальный файл и т. Д.). Чтобы прочитать это, вам придется создавать Читатели или потоки, которые API будет делать сам по себе. Если API не предоставляет методы для передачи в Reader или InputStream, вам не повезло.

0

Java работает с InputStream (или OutpusStream). Использование java.io.File уже слишком сильно усиливает, тогда класс File не является чем-либо, на котором вы можете читать или писать: он просто представляет запись в файловой системе (из которой вы можете тогда, но только тогда, получить связанные с ней потоки ввода и вывода).

Поэтому у вас должен быть метод, который принимает общий InputStream. Если API просто поддерживает объект File, то он явно плохо разработан (или вы пытаетесь использовать их не разрешенным способом).

0
String strFilePath = "filePath"; 
byte[] writeBytes = ...; 
try { 
    FileOutputStream fos = new FileOutputStream(strFilePath); 
    fos.write(byteArray); 
    fos.close(); 
} catch(FileNotFoundException ex) { 
    // handle FileNotFoundException here 
} catch(IOException ioe) { 
    // handle IOException here 
} 

EDIT: Обычно я не фанат просто дает код, но весь этот потоковый материал используется, чтобы запутать меня совсем немного, так что здесь есть решение;).

EDIT2: Хорошо, я просто понял, что это именно то, что OP не хотел делать. Так что этот ответ не очень полезно ...

+0

Не используйте 'System.out.println()' как свою обработку исключений. Даже в примере кода. * Особенно * не в примере кода. Это часто копируется в производственный код, и это уже не смешно. –

+0

@JoachimSauer Вы совершенно правы. Плохой бримборий. Изменено. ;) – brimborium

1

Вы можете открыть временный файл: open temp file in java

Тогда, если взять байт [] и записать все это во временный файл через некоторое OutputStream/Writer вы должны иметь то, что тебе нужно. Затем вы можете передать файл, не создавая его на диске.

Смежные вопросы