android - 打开失败 : EBUSY (Device or resource busy)

标签 android inputstream unzip

我的应用中有一个奇怪的错误。

在我的应用程序中,可以下载一个 zipFile,按原样读取内容并删除它。它到底是什么并不重要。

问题:只有在摩托罗拉 Xoom(4.0.4 版)上我可以下载文件,解压缩,我可以读取数据,我可以删除所有内容。 但是,如果我尝试再次下载文件并解压缩文件并将文件复制到 SD 卡,它会崩溃并出现错误 EBUSY(设备或资源忙)。

  1. 为什么它只在第一次工作?
  2. 这个错误是什么意思?
  3. 为什么我只在 Xoom 上收到此错误?

我找不到任何解决方案。在所有其他设备上它工作正常,没有错误或问题。

LogCat:

07-18 12:27:46.774: E/PrepareMagTask(10057): IOException
07-18 12:27:46.774: E/PrepareMagTask(10057): java.io.FileNotFoundException: /mnt/sdcard/Android/data/com.xxxxxx.android/files/content/23760/emag.db: open failed: EBUSY (Device or resource busy)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at libcore.io.IoBridge.open(IoBridge.java:406)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at com.xxxxx.android.util.io.ZipHelper.uncompressEntry(ZipHelper.java:35)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at com.xxxxx.android.task.PrepareMagTask.doInBackground(PrepareMagTask.java:271)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at com.xxxxx.android.task.PrepareMagTask.doInBackground(PrepareMagTask.java:1)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at java.lang.Thread.run(Thread.java:856)
07-18 12:27:46.774: E/PrepareMagTask(10057): Caused by: libcore.io.ErrnoException: open failed: EBUSY (Device or resource busy)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at libcore.io.Posix.open(Native Method)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-18 12:27:46.774: E/PrepareMagTask(10057):    at libcore.io.IoBridge.open(IoBridge.java:390)
07-18 12:27:46.774: E/PrepareMagTask(10057):    ... 11 more

它在我的 ZipHelper 类的第 35 行崩溃:

FileHelper.copy(zipFile.getInputStream(entry), new FileOutputStream(outputFile), modify);

getInputStream(entry) ...我真的不知道为什么?

有没有一种方法可以在设备繁忙时等待设备或追索权? 每次我尝试解压缩文件时都会发生这种情况,应用程序会尝试 5 次(下载 -> 解压缩)并且每次都会崩溃。

编辑:我们发现,它不仅仅是 Xoom。我们也有版本 4.0.4 的华硕 Transformer 的错误

最佳答案

我有一个重要的答案! 问题来自 Android 系统或/和 FAT32 系统。 我无法解释系统是如何出错的,它与删除文件和FAT32系统有关。

但解决方案非常简单: 在删除目录或文件之前:重命名它!

重命名代码:

final File to = new File(file.getAbsolutePath() + System.currentTimeMillis());
file.renameTo(to);
to.delete();

就是这样,如果您在删除之前重命名文件夹或文件,系统将没有机会再次尝试打开现有文件或您想要再次保存的打开文件(或类似的东西)。

关于android - 打开失败 : EBUSY (Device or resource busy) ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539657/

相关文章:

Android Marshmallow(已root): How to read/write any file

java - 从 Fragment 中访问 ActionBar

java - 尽管我添加了正确的 Apache POI .jar 文件,Eclipse 仍抛出 ClassNotFoundException?

c# - 使用 7z.exe 在 C# 中解压缩文件

android - 在同一个 TextView 中显示字符串数组,时间间隔为 5 秒

android - 连接到 GATT 服务器时从未调用过 onServicesDiscovered

Java文件加密,无法让它接受文件输入

java - 制作文件输入流时未找到文件异常?

C# 压缩文件。如何提取或跳过名称中包含无效字符的文件?

linux - 如何在 Windows 上使用 Git Bash 解压缩 .gz 文件?