List of usage examples for java.nio.file AtomicMoveNotSupportedException AtomicMoveNotSupportedException
public AtomicMoveNotSupportedException(String source, String target, String reason)
From source file:org.cryptomator.cryptofs.CryptoFileSystemImpl.java
void move(CryptoPath cleartextSource, CryptoPath cleartextTarget, CopyOption... options) throws IOException { if (cleartextSource.equals(cleartextTarget)) { return;//from w w w . ja v a 2 s . c om } Path ciphertextSourceFile = cryptoPathMapper.getCiphertextFilePath(cleartextSource, CiphertextFileType.FILE); Path ciphertextSourceDirFile = cryptoPathMapper.getCiphertextFilePath(cleartextSource, CiphertextFileType.DIRECTORY); if (Files.exists(ciphertextSourceFile)) { // FILE: Path ciphertextTargetFile = cryptoPathMapper.getCiphertextFilePath(cleartextTarget, CiphertextFileType.FILE); Files.move(ciphertextSourceFile, ciphertextTargetFile, options); } else if (Files.exists(ciphertextSourceDirFile)) { // DIRECTORY: Path ciphertextTargetDirFile = cryptoPathMapper.getCiphertextFilePath(cleartextTarget, CiphertextFileType.DIRECTORY); if (!ArrayUtils.contains(options, StandardCopyOption.REPLACE_EXISTING)) { // try to move, don't replace: Files.move(ciphertextSourceDirFile, ciphertextTargetDirFile, options); } else if (ArrayUtils.contains(options, StandardCopyOption.ATOMIC_MOVE)) { // replace atomically (impossible): assert ArrayUtils.contains(options, StandardCopyOption.REPLACE_EXISTING); throw new AtomicMoveNotSupportedException(cleartextSource.toString(), cleartextTarget.toString(), "Replacing directories during move requires non-atomic status checks."); } else { // move and replace (if dir is empty): assert ArrayUtils.contains(options, StandardCopyOption.REPLACE_EXISTING); assert !ArrayUtils.contains(options, StandardCopyOption.ATOMIC_MOVE); if (Files.exists(ciphertextTargetDirFile)) { Path ciphertextTargetDir = cryptoPathMapper.getCiphertextDirPath(cleartextTarget); try (DirectoryStream<Path> ds = Files.newDirectoryStream(ciphertextTargetDir)) { if (ds.iterator().hasNext()) { throw new DirectoryNotEmptyException(cleartextTarget.toString()); } } Files.delete(ciphertextTargetDir); } Files.move(ciphertextSourceDirFile, ciphertextTargetDirFile, options); } dirIdProvider.move(ciphertextSourceDirFile, ciphertextTargetDirFile); } else { throw new NoSuchFileException(cleartextSource.toString()); } }