AFAIK №
И причина в том, что для такой атомарной операции должна быть поддержка ОС в форме транзакционной файловой системы. И ни одна из основных операционных систем не предлагает транзакционную файловую систему.
РЕДАКТИРОВАТЬ - Я ошибаюсь, по крайней мере, для POSIX-совместимых систем. Системный вызов POSIX rename
выполняет атомарную замену, если файл с целевым именем уже существует ..., как указано @janneb. Этого должно быть достаточно для атомарной операции ОП.
Однако факт остается фактом: * Java 1010 * явно не гарантированно является атомарным, поэтому он не обеспечивает кросс-платформенное решение проблемы OP.
РЕДАКТИРОВАТЬ 2 - В Java 7 вы можете использовать java.nio.file.Files.move(Path source, Path target, CopyOption... options)
с copyOptions и ATOMIC_MOVE
. Если это не поддерживается (ОС / файловая система), вы должны получить исключение.