← Назад к вопросам

Происходит ли запись в текстовый файл при создании InputStream

1.0 Junior🔥 121 комментариев
#ORM и Hibernate#Spring Boot и Spring Data#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Запись в файл при создании InputStream

Прямой ответ: Нет, создание InputStream НЕ вызывает запись в файл. InputStream предназначен только для чтения данных из источника (файла, памяти, сети). Это входящий поток для получения информации, а не для её отправки.

Различие между потоками

InputStream — используется для чтения:

  • FileInputStream — чтение из файла
  • ByteArrayInputStream — чтение из массива байт
  • BufferedInputStream — буферизованное чтение

OutputStream — используется для записи:

  • FileOutputStream — запись в файл
  • ByteArrayOutputStream — запись в память
  • BufferedOutputStream — буферизованная запись

Пример: InputStream НЕ пишет

// Файл test.txt содержит: "Hello World"

public class InputStreamExample {
    public static void main(String[] args) throws IOException {
        // Просто создаём InputStream
        InputStream inputStream = new FileInputStream("test.txt");
        
        // В этот момент файл НЕ изменился
        // Ничего не было записано
        
        // Только при чтении получаем данные
        byte[] buffer = new byte[11];
        int bytesRead = inputStream.read(buffer); // Читаем, не пишем
        
        System.out.println(new String(buffer)); // "Hello World"
        
        inputStream.close();
    }
}

Что происходит при создании FileInputStream

public class FileInputStreamCreation {
    public static void main(String[] args) throws IOException {
        // Шаг 1: Создаём FileInputStream
        FileInputStream fis = new FileInputStream("data.txt");
        // При создании происходит:
        // 1. Открытие файла на чтение
        // 2. Выделение файлового дескриптора
        // 3. Проверка прав доступа на чтение
        // НО НЕ происходит запись
        
        // Шаг 2: Чтение данных
        byte[] buffer = new byte[1024];
        int count = fis.read(buffer); // Читаем байты из файла
        
        // Шаг 3: Закрытие потока
        fis.close(); // Освобождаем ресурсы
    }
}

Различие между InputStream и OutputStream

public class StreamComparison {
    public static void main(String[] args) throws IOException {
        // InputStream — ДЛЯ ЧТЕНИЯ
        InputStream input = new FileInputStream("source.txt");
        byte[] data = new byte[100];
        input.read(data); // Читаем из файла
        input.close();
        
        // OutputStream — ДЛЯ ЗАПИСИ
        OutputStream output = new FileOutputStream("destination.txt");
        output.write(data); // Пишем в файл
        output.flush(); // Сбрасываем буфер
        output.close();
    }
}

Возможная путаница с режимами открытия файла

Возможно, вопрос имеет в виду: может ли FileOutputStream или другой поток записи изменить файл? Тогда ответ другой:

public class FileOutputStreamWriting {
    public static void main(String[] args) throws IOException {
        // FileOutputStream вызывает запись
        OutputStream output = new FileOutputStream("test.txt");
        // При создании файл ОЧИЩАЕТСЯ (если mode не append)
        
        output.write("Hello".getBytes()); // Пишем
        output.flush(); // Сбрасываем в ОС
        output.close(); // Окончательно закрываем
    }
}

Заметьте: new FileOutputStream("test.txt") перезапишет существующий файл, но new FileOutputStream("test.txt", true) добавит данные в конец.

Буферизация и момент записи на диск

public class BufferingExample {
    public static void main(String[] args) throws IOException {
        // Создание InputStream — только открытие для чтения
        InputStream input = new FileInputStream("data.txt");
        
        // Нет записи на диск при создании
        // Файл просто открывается для чтения
        
        // С OutputStream ситуация иная:
        OutputStream output = new FileOutputStream("output.txt");
        // При создании файл может быть перезаписан (в зависимости от режима)
        
        output.write("data".getBytes());
        // Данные в буфере, на диск ещё не записаны
        
        output.flush();
        // Теперь данные точно записаны на диск (или будут вскоре)
        
        output.close();
        // Буфер сбрасывается, ресурсы освобождаются
    }
}

Вывод

  • InputStream — только чтение, запись не происходит
  • OutputStream — только запись
  • Создание FileInputStream просто открывает файл для доступа на чтение
  • Создание FileOutputStream может перезаписать файл (если не указан режим append)
  • Данные записываются только при явном вызове write() и flush()
Происходит ли запись в текстовый файл при создании InputStream | PrepBro