我试图理解以下行为。我的旧代码,
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 - 已删除 - 假
仅当我执行“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 - 已删除 - 真
但这在应用程序退出之前不会删除文件。如果我使用“fChannel.close()”,它会立即删除它。
几个问题,
- 为什么不同的行为,我理解两者都是不同的类型,即 RA 与 Seekable Channel。但不确定,为什么删除应该表现不同。
- 在较新的实现中,如果在应用程序退出之前它不删除文件,那么它应该返回 false(即不会删除,直到调用 close)或者然后立即删除。
我不知道我是否遇到了错误或遗漏了什么。任何指针都可以提供帮助。
谢谢