google guava lib contains Files.move (..) mothod, which confirms some of your requirements - in fact, it tries to move the file from File.renameTo (), and in case of failure it also tries to copy and remove-source.
I do not know libs that checks free space, because free space can change during moving / copying, and the only way to process low space sequentially is to use the copy / move method to return a special error / exception code indicating that you are the reason crashing - which current Java API does not have ...
source share