次の動作を理解しようとしています。私の古いコード、
String path = "C:/temp/sample.txt";
String mode= "rw";
FileChannel channel = new RandomAccessFile(path, mode).getChannel();
// some code to write to this file
// finally delete
File file = new File(path);
boolean isDeleted = file.delete();
System.out.println("Is Deleted - " + isDeleted);
O/P - 削除済み - false
「channel.close();」を実行した場合のみ ファイルを削除する前に。ファイルを削除して true を返しますか。
新しい置き換えコード、
String path = "C:/temp/sample.txt";
FileChannel fChannel = FileChannel.open(path, StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
// some code to write to this file
// finally delete
File file = new File(path);
boolean isDeleted = file.delete();
System.out.println("Is Deleted - " + isDeleted);
O/P - 削除済み - true
ただし、これはアプリケーションが終了するまでファイルを削除しません。「fChannel.close()」を使用すると、すぐに削除されます。
いくつかの質問、
- なぜ異なる動作なのか、RA と Seekable Channel など、両方が異なるタイプであることを理解しています。しかし、よくわかりませんが、なぜ delete が異なる動作をする必要があるのでしょうか。
- 新しい実装では、アプリケーションが終了するまでファイルを削除しない場合は、false を返す (つまり、close が呼び出されるまで削除しない) か、すぐに削除する必要があります。
バグに遭遇したのか、何かが欠けているのかわかりません。任意のポインターが役立ちます。
ありがとう