Если ваш BTree и его узлы реализуют Serialiable, вы можете записать дерево и его содержимое в файл, используя ObjectOutputStream и FileOutputStream. Это будет легко проверить: запишите его в файл .ser, прочитайте его обратно и убедитесь, что вы вернули оригинальный BTree.
Java Almanac содержит несколько хороших примеров, которые помогут вам.
ОБНОВЛЕНИЕ: я не вижу ни вашего варианта использования для динамической записи, когда внесены изменения, ни "нежелания писать все дерево".
То, что вы предлагаете, кажется невероятно медленным. Зеркалирование каждого изменения в памяти с соответствующей модификацией файла займет много времени.
Если вы пытаетесь реализовать свою собственную базу данных, это имеет смысл. Какой сценарий ты имеешь в виду?