Вы не можете писать, используя FileInputStream. вам нужно использовать RandomAccessFile, если вы хотите записать в произвольные места в файле. К сожалению, не существует простого способа использовать RandomAccessFile в качестве InputStream / OutputStream (похоже, у @aix может быть хорошее предложение для адаптации RandomAccessFile к InputStream / OutputStream), но в Интернете есть различные примеры адаптеров.
другой альтернативой является использование FileChannel. Вы можете установить положение FileChannel напрямую, а затем использовать служебные методы Channels, чтобы получить адаптеры InputStream / OutputStream поверх Channel.