Отвечая на мой собственный вопрос ... Обратите внимание, что я понял это методом проб и ошибок, поэтому я могу ошибаться в некоторых моментах:
Архивы рассматриваются как каталоги.Files.copy(archive, archive)
по сути пытается скопировать один каталог в другой.Files.copy(Path, Path)
предназначен для копирования одного файла, а не для рекурсивного копирования каталогов.
Теперь, когда мы знаем, что архивы обрабатываются как каталоги, мы просто копируем файлы из одного каталога в другой:
Files.walkFileTree(sourceFile, new SimpleFileVisitor<Path>()
{
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
Files.copy(file, targetFile.resolve(sourceFile.relativize(file)),
StandardCopyOption.COPY_ATTRIBUTES);
return super.visitFile(file, attrs);
}
});
3.Да, вы можете использовать: targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT);