Урок 3. Работа с файлами используя FileInputStream и FileOutputStream

В этом уроке будет продемонстрирована работа с FileInputStream и FileOutputStream потоками, где мы рассмотрим как записать данные в файл и как их оттуда прочитать.

Шаг 1

Создаем простой Java проект и создаем файл FileInputOutputStream.java со следующим содержимым:

package examples;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputOutputStream {

    // Класс для работы потоком вывода из файла
    private FileInputStream inputStream;

    // Класс для работы потоком ввода в файл
    private FileOutputStream outputStream;

    // полный путь к файлу
    private String path;

    public FileInputOutputStream(String path) {
        this.path = path;
    }

    public void read() throws IOException {
        // инициализируем поток вывода из файлу
        inputStream = new FileInputStream(path);

        // читаем первый символ с потока байтов
        int data = inputStream.read();
        char content;

        // если data будет равна 0 то это значит,
        // что файл пуст
        while(data != -1) {
            // переводим байты в символ
            content = (char) data;

            // выводим полученный символ
            System.out.print(content);

            // читаем следующий байты символа
            data = inputStream.read();
        }

        // закрываем поток чтения файла
        inputStream.close();
    }

    public void write(String st) throws IOException {
        // открываем поток ввода в файл
        outputStream = new FileOutputStream(path);

        // записываем данные в файл, но 
        // пока еще данные не попадут в файл,
        // а просто будут в памяти
        outputStream.write(st.getBytes());

        // только после закрытия потока записи, 
        // данные попадают в файл
        outputStream.close();
    }

}

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

Шаг 2

Запускаем и смотрим результат в консоли:

Hello DevColibri!

а потом проверяем файл и видим что текст записался.

Урок создан: 12 сентября 2013 | Просмотров: 29398 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 12 октября 2013 в 16:14

    Василий

    Если вы не используете FileInputStream/FileOutputStream нигде кроме как в функциях read/write. То почему бы их экземпляры не объявить локально там где они будут используются?

    • 12 октября 2013 в 16:15

      Василий

      использоваться*

  • 01 февраля 2014 в 12:50

    Виталик Альянс

    а что если в ходе будет выброшено исключение и поток не будет закрыт?

  • 20 ноября 2014 в 10:39

    Евгений

    outputStream.write(st.getBytes());
    При работе с байтами лучше указывать кодировку, что бы потом не было сюрпризов.
    outputStream.write(st.getBytes(«UTF-8»));

    • 29 октября 2015 в 13:38

      Кристина

      как-то не помогло(почему-то вместо текста выводит знаки вопроса

  • 16 марта 2015 в 14:41

    Виталий

    «если data будет равна 0 то это значит, что файл пуст»
    тогда, возможно, правильней будет «while(data > 0)», а то зациклит при пустом файле…

  • 16 марта 2015 в 14:50

    Виталий

    да и можно немного рассказать в чем же разница между FileInputStream и InputStream, а то по примерам действительно непонятно