Android outputstream to file

Потоки вывода, OutputStream

Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.

Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.

В данной статье рассматривается вопрос использования потоков для вывода данных в файл. Иерархии выходных OutputStream потоков представлена на следующем рисунке.

Поток Stream— это абстрактное значение источника или приёмника данных, которые способны обрабатывать информацию. Есть два типа потоков: байтовые и символьные. В некоторых ситуациях символьные потоки более эффективны, чем байтовые. Классы, производные от классов OutputStream или Writer, имеют методы с именами write() для записи одиночных байтов или массива байтов (отвечают за вывод данных).

Выходной поток OutputStream

Класс OutputStream — это абстрактный класс, определяющий байтовый поток вывода. Наследники данного класса определяют куда направлять данные: в массив байтов, в файл или канал. Из массива байт можно создать текстовую строку String.

Методы класса OutputStream :

  • void write(int b) записывает один байт в выходной поток. Аргумент этого метода имеет тип int, что позволяет вызывать write, передавая ему выражение, при этом не нужно выполнять приведение его типа к byte.
  • void write(byte b[]) записывает в выходной поток весь указанный массив байтов.
  • void write(byte b[], int off, int len) записывает в поток len байтов массива, начиная с элемента b[off].
  • void flush() очищает любые выходные буферы, завершая операцию вывода.
  • void close() закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException.

Класс ByteArrayOutputStream

Класс ByteArrayOutputStream представляет поток вывода, использующий массив байтов в качестве места вывода. Чтобы создать объект данного класса, можно использовать один из его конструкторов :

Первый конструктор создает массив данных для хранения байтов длиной в 32 байта, а второй конструктор создает массив длиной size.

Примеры использования класса ByteArrayOutputStream :

В классе ByteArrayOutputStream метод write записывает в поток некоторые данные (массив байтов). Этот массив байтов записывается в объекте ByteArrayOutputStream в защищенное поле buf, которое представляет также массив байтов (protected byte[] buf). Так как метод write может вызвать исключение, то вызов этого метода помещается в блок try..catch.

Используя методы toString() и toByteArray(), можно получить массив байтов buf в виде текста или непосредственно в виде массива байт.

С помощью метода writeTo можно перенаправить массив байт в другой поток. Данный метод в качестве параметра принимает объект OutputStream, в который производится запись массива байт :

Для ByteArrayOutputStream не надо явным образом закрывать поток с помощью метода close.

Класс FileOutputStream

Класс FileOutputStream создаёт объект класса OutputStream, который можно использовать для записи байтов в файл. Это основной класс для работы с файлами. Создание нового объекта не зависит от того, существует ли заданный файл или нет. Если файл отсутствует, то будет создан новый файл. В случае попытки открытия файла, доступного только для чтения, будет вызвано исключение.

Читайте также:  Не могу удалить рекламу с андроида

FileOutputStream имеет следующий конструкторы:

Смысл конструкторов последнего понятен из их описания. Но имеется несколько нюансов :

  • При открытии файла на запись, если файл не существует, то он будет создан.
  • Если файл существует, то он будет полностью обновлен. Т.е. если открыть и сразу закрыть файл, то содержимое файла будет уничтожено; реальный файл на диске станет нулевой длины.
  • Исключением для предыдущего правила является последний из конструкторов. Если третьему параметру append присвоить значение true, то можно будет дописывать в конец файла.

Какой-либо дополнительной функциональности по сравнению с базовым классом FileOutputStream не добавляет.

Класс BufferedOutputStream

Класс BufferedOutputStream создает буфер для потоков вывода. Этот буфер накапливает выводимые байты без постоянного обращения к устройству. И когда буфер заполнен, производится запись данных.

Класс BufferedOutputStream в конструкторе принимает в качестве параметра объект OutputStream — в примере это файловый поток вывода FileOutputStream.

BufferedOutputStream не добавляет много новой функциональности, он просто оптимизирует действие потока выводаи его следует использовать для организации более эффективного буферизованного вывода в поток.

Класс DataOutputStream

Класс DataOutputStream позволяет писать данные в поток через интерфейс DataOutput, который определяет методы, преобразующие элементарные значения в форму последовательности байтов. Такие потоки облегчают сохранение в файле двоичных данных.

Для записи каждого из примитивных типов предназначен свой метод класса DataOutputStream:

  • writeByte(int value) — записывает в поток 1 байт
  • writeChar(int value) — записывает 2х-байтовое значение char
  • writeInt(int value) — записывает в поток целочисленное значение int
  • writeShort(int v) — записывает в поток значение short
  • writeFloat(float value) — записывает в поток 4-байтовое значение float
  • writeDouble(double value) — записывает в поток 8-байтовое значение double
  • writeBoolean(boolean value) — записывает в поток булевое однобайтовое значение
  • writeLong(long value) — записывает в поток значение long
  • writeUTF(String value) — записывает в поток строку в кодировке UTF-8

Класс PrintStream

PrintStream является именно тем классом, который используется для вывода информации в консоль. Когда мы с помощью вызова System.out.println() пишем в консоль некоторую информацию, то тем самым используется PrintStream, так как переменная out класса System представляет объект класса PrintStream, а метод println() — это метод класса PrintStream.

Но PrintStream можно использовать для записи информации в поток вывода. Например, запишем информацию в файл:

В данном примере используется конструктор PrintStream, который в качестве параметра принимает поток вывода FileOutputStream. Можно было бы также использовать конструктор с указанием названия файла для записи: PrintStream (String filename).

С помощью метода println() производится запись информации в выходной поток — то есть в объект FileOutputStream. В случае с выводом на консоль с помощью System.out.println() в качестве потока вывода выступает консоль.

Для вывода информации в выходной поток PrintStream использует следующие методы:

Следующий код показывает возможности использования форматированного вывода класса PrintStream :

Класс ObjectOutputStream

Класс ObjectOutputStream используется для сериализации объектов в поток. Сериализация представляет процесс записи состояния объекта в поток, соответственно процесс извлечения или восстановления состояния объекта из потока называется десериализацией. Сериализация очень удобна, когда идет работа со сложными объектами.

Читайте также:  Как разблокировать андроид если забыл пароль alcatel

Для создания объекта ObjectOutputStream необходимо в конструктор передать поток, в который будет производится запись объектов.

Для записи данных ObjectOutputStream использует ряд методов, среди которых можно выделить следующие:

Метод Описание
void close() закрывает поток
void flush() сбрасывает содержимое буфера в выходной поток и очищает его
void write(byte[] buf) записывает в поток массив байтов
void write(int val) записывает в поток один младший байт из val
void writeBoolean(boolean val) записывает в поток значение boolean
void writeByte(int val) записывает в поток один младший байт из val
void writeChar(int val) записывает в поток значение типа char, представленное целочисленным значением
void writeDouble(double val) записывает в поток значение типа double
void writeFloat(float val) записывает в поток значение типа float
void writeInt(int val) записывает целочисленное значение
void writeLong(long val) записывает значение типа long
void writeShort(int val) записывает значение типа short
void writeUTF(String str) записывает в поток строку в кодировке UTF-8
void writeObject(Object obj) записывает в поток отдельный объект

Представленные методы охватывают весь спектр данных, которые можно сериализовать.

Пример использования класса ObjectOutputStream :

Необходимо принимать во внимание, что сериализовать можно только те объекты, которые реализуют интерфейс Serializable.

Класс PipedOutputStream

Пакет java.io содержит класс PipedOutputStream, который может быть подключен к PipedInputStream, используемый для установления связи между двумя каналами. Данные в PipedOutputStream передаются в потоке Thread, который отправляет их в подключенный PipedInputStream, где данные также читаются, но в другом потоке.

То есть, класс PipedOutputStream предназначен для передачи информации между программами через каналы (pipes).

Наиболее часто используемые методы класса PipedOutputStream :

  • void write(int b) — запись байта в канал
  • void write(byte[] bytes, int off, int len) — запись определенного количества len байт начиная со смещения off массив bytes
  • connect(PipedInputStream pis) — установление связи в каналом ввода pis
  • close() — закрытие канала
  • flush() — сброс данных в канал

Все методы класса могут вызвать исключение IOException.

Пример использования класса PipedOutputStream :

Источник

Android outputstream to file

Applications that need to define a subclass of OutputStream must always provide at least a method that writes one byte of output.

Constructor Summary

Constructors
Constructor and Description
OutputStream ()

    Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type Method and Description
    void close ()

    Methods inherited from class java.lang.Object

    Constructor Detail

    OutputStream

    Method Detail

    write

    Subclasses of OutputStream must provide an implementation for this method.

    write

    write

    The write method of OutputStream calls the write method of one argument on each of the bytes to be written out. Subclasses are encouraged to override this method and provide a more efficient implementation.

    If b is null , a NullPointerException is thrown.

    If off is negative, or len is negative, or off+len is greater than the length of the array b , then an IndexOutOfBoundsException is thrown.

    flush

    If the intended destination of this stream is an abstraction provided by the underlying operating system, for example a file, then flushing the stream guarantees only that bytes previously written to the stream are passed to the operating system for writing; it does not guarantee that they are actually written to a physical device such as a disk drive.

    The flush method of OutputStream does nothing.

    close

    The close method of OutputStream does nothing.

    Источник

    Java FileOutputStream

    last modified November 12, 2021

    Java FileOutputStream tutorial shows how to use FileOutputStream class to write to files in Java.

    Java FileOutputStream

    FileOutputStream is an output stream for writing data to a File or to a FileDescriptor . FileOutputStream is a subclass of OutputStream , which accepts output bytes and sends them to some sink. In case of FileOutputStream , the sink is a file object.

    Java FileOutputStream constructors

    These are FileOutputStream constructors:

    • FileOutputStream(File file) — creates a file output stream to write to a File object.
    • FileOutputStream(File file, boolean append) — creates a file output stream to write to a File object; allows appending mode.
    • FileOutputStream(FileDescriptor fdObj) — creates a file output stream to write to the specified file descriptor.
    • FileOutputStream(String name) — creates a file output stream to write to the file with the specified name.
    • FileOutputStream(String name, boolean append) — creates a file output stream to write to the file with the specified name; allows appending mode.

    Java FileOutputStream close

    The FileOutputStream’s close method closes file output stream and releases any system resources associated with this stream. In our examples we use try-with-resources statement, which ensures that each resource is closed at the end of the statement.

    Java FileOutputStream write

    FileOutputStream writes bytes with the following write methods :

    • write(byte[] b) — writes array of bytes to the file output stream.
    • write(byte[] b, int off, int len) — writes len bytes from the specified byte array starting at offset off to the file output stream.
    • write(int b) — writes one byte to the file output stream.

    Java FileOutputStream example

    The following example uses FileOutputStream to write text to a file.

    The code example writes one line to a file.

    The FileOutputStream constructor takes a string as a parameter; it is the file name to which we write. We use try-with-resources construct to clean resources after we have finished writing.

    FileOutputStream write bytes to the file; we get bytes from a string with the getBytes method.

    The bytes are written to the file.

    We show the contents of the file with the cat command.

    Java FileOutputStream append to file

    With FileOutputStream it is possible to append data to a file. The typical usage for appending is logging.

    The code example appends text to file.

    The second parameter of FileOutputStream indicates that we will append to the file.

    Java FileOutputStream specifying encoding

    FileWriter class, which is a Java convenience class for writing character files, has a serious limitation: it uses the default encoding and does not allow us to explicitly specify the encoding. If we have to set the encoding, we can use OutputStreamWriter and FileOutputStream .

    The example writes text to a file with OutputStreamWriter . The second parameter is the charset to be used.

    We show the contents of the file.

    In this tutorial, we have presented the Java FileOutputStream class.

    Источник

    Читайте также:  Baidu browser для андроид
Оцените статью