google guava lib содержит метод Files.move (..), который подтверждает некоторые ваши требования - на самом деле он пытается переместить файл с помощью File.renameTo () и, в случае неудачи, пытается скопировать и стратегия удаления источника.
Я не знаю библиотек, которые проверяют свободное место, так как свободное пространство может изменяться во время перемещения / копирования, и единственный способ последовательно обрабатывать малое пространство - это использовать метод копирования / перемещения для возврата специального кода ошибки / исключения, указывающего на причина сбоя - какой текущий Java File API не имеет ...