gpt4 book ai didi

Java vs Android 删除由 FileInputStream 打开的文件

转载 作者:行者123 更新时间:2023-12-02 04:31:05 28 4
gpt4 key购买 nike

我有一个代码 fragment ,它将通过输入/输出流打开本地文件,但它会 hibernate 或等待一会儿(此时,流仍然打开,而不是关闭),而我通过另一个文件删除该文件文件管理程序。 Java 和 Android 之间的行为似乎有所不同。

Java:无法删除该文件,因为另一个程序正在访问它 - FileInputStream 仍未关闭

   File f = new File("D:\\" + File.separator + "testfile.txt");
try {
f.createNewFile();
FileInputStream fis = new FileInputStream(f);
// Still not close
try {
Thread.sleep(60000); // At this time I will use another program to delete this file
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}

Android:该文件可以正常删除 - 尽管 FileInputStream 仍未关闭

    File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "testfile.txt");
try {
f.createNewFile();
FileInputStream fis = new FileInputStream(f);
// Still not close
try {
Thread.sleep(60000); // At this time I will use another program to delete this file
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}

谁能向我解释一下为什么这些平台之间有差异?我只知道android重用java sdk,可能他们的行为在从java迁移到android时被修改了?还是其他原因......?

最佳答案

Can anyone explain to me why has the diffence between these platform

这实际上是 Linux(以及 Android 和 Mac OSX)1 与 Windows 之间的区别。

  • Linux等通过“取消链接”文件来实现文件删除,并且只有在所有文件句柄都已关闭时才真正删除它。

  • 在 Windows 中(至少在历史上),删除文件会立即删除它,因此删除打开的文件是可以实现的。这种情况已经改变,但删除的限制仍然存在。 (请参阅 MSDN 中的 "DeleteFile function" 页面。)

<小时/>

1 - Linux、Android 和 Mac OSX 操作系统的设计均源自经典 UNIX,并且 UNIX 至少从版本 6 起就使用“取消链接”语义来进行文件删除。Windows 源自最终来自 MS/DOS。

关于Java vs Android 删除由 FileInputStream 打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457017/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com