JDK1.7から新しいファイル移動APIが追加されました。
今まで、Java言語ではアトミックなファイル移動が出来ませんでした。それが、このAPIの追加により可能になります。ただし、このアトミックなファイル移動ですが、移動元フォルダと移動先フォルダのドライブが異なる場合には使用できません。
(アトミックなファイル移動がどういうことが理解できれば、当然といえば当然の仕様です。)
この例では、Cドライブの直下にあるファイルをDドライブの直下にファイルを移動させようとしています。
しかし、「java.nio.file.AtomicMoveNotSupportedException」が発生します。
(ちなみに、CドライブとDドライブは論理的に分かれているだけです。物理は一緒のドライブ)
public static void main(String[] args) {
String src = "C:\\テスト.txt";
String dst = "D:\\テスト.txt";
move(src, dst);
}
public static void move(String srcPathStr, String dstPathStr) {
FileSystem fileSystem = FileSystems.getDefault();
Path srcPath = fileSystem.getPath(srcPathStr);
Path dstPath = fileSystem.getPath(dstPathStr);
try {
// StandardCopyOption.ATOMIC_MOVEはドライブをまたがる場合は使用不可
Files.move(srcPath, dstPath, StandardCopyOption.ATOMIC_MOVE);
} catch (IOException e) {
e.printStackTrace();
}
}
java.nio.file.AtomicMoveNotSupportedException: C:\テスト.txt -> D:\テスト.txt: ファイルを別のディスク ドライブに移動できません。
at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:299)
at
sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
at java.nio.file.Files.move(Files.java:1395)
at jp.co.sapporo.toyohira.apps.Main.move(Main.java:25)
at jp.co.sapporo.toyohira.apps.Main.main(Main.java:15)