/*
Объединение файлов
Считать с консоли 2 имени файла.
В начало первого файла записать содержимое второго файла так, чтобы получилось объединение файлов.
Закрыть потоки.
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String file1 = "c:/1.txt";
        String file2 = "c:/2.txt";
//
//        String file1 = reader.readLine();
//        String file2 = reader.readLine();

        FileInputStream fileInputStream = new FileInputStream(file1);// сначала считываем первый файл
        int file1Data = 0;
        byte[] buffer1 = new byte[fileInputStream.available()];
        while (fileInputStream.available() > 0) {
            int data = fileInputStream.read(buffer1);
            file1Data = data; // и записываем в како-то буффер
        }

        FileOutputStream fileOutputStream = new FileOutputStream(file1);// открыт поток для записи в 1 файл
        FileInputStream fileInputStream2 = new FileInputStream(file2); // открыт поток для чтения 2 файл
        while (fileInputStream2.available() > 0) {
            int dt = fileInputStream2.read();
            fileOutputStream.write(dt);
        } // перекидываем данные из файла 2 в файл один

        fileOutputStream.write(buffer1, 0, file1Data); //дописываем данные из буффера
        fileInputStream2.close();
        fileInputStream.close();
        fileOutputStream.close();
    }
}
Есть код, представленный выше, он рабочий и валидатор его принимает(если убрать комментарии сверху для чтения названия файлов из консоли). задача решена. Однако я не до конца понимаю почему такое поведение. При текущем коде результат правильный. То есть мой файл 1.txt содержит текст "111" Файл 2.txt содержит текст "222". При выполнении кода в файле 1.txt результатом является текст "222111", что правильно. Вопрос: почему происходит именно дописывание, а не замещение, ведь в FileOutputString не указан append ? В последней строчке -- fileOutputStream.write(buffer1, 0, file1Data); мы как по идее замещаем содержимое при текущем исполнении метода.