java - android 将数据库从 Assets 复制到 sdcard - 打开失败 : EISDIR (Is a directory)

标签 java android

这是我将数据库从 Assets 文件夹复制到 SD 卡的代码:

File databaseFile = new File(context.getExternalFilesDir(null),"");
if(!databaseFile.exists()){
    databaseFile.mkdirs();
}

String outFileName = context.getExternalFilesDir(null) + "/db.db";
try {
    OutputStream myOutput = new FileOutputStream(outFileName);
    byte[] buffer = new byte[1024];
    int length;
    InputStream myInput = context.getAssets().open("db");
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }
    myInput.close();

    myOutput.flush();
    myOutput.close();
} catch (Exception e) {
    Log.v("this",e.getMessage().toString());
}

当我运行它时,它给我这个错误:

/storage/emulated/0/Android/data/myPackageName/files/db.db: open failed: EISDIR (Is a directory)

我该如何解决这个问题? 我读过这个主题但没有用: FileOutputStream crashes with "open failed: EISDIR (Is a directory)" error when downloading image

另外,我在读取设备上测试,同样的错误 谢谢

最佳答案

我无法从您附加的日志行中得到完整的图片。

不过,如果我不得不猜测,您的问题可能出在这里:

  if(!databaseFile.exists()){
            databaseFile.mkdirs();
  }

请记住:mkdirs() 获取您传递给它的整个路径参数,将其分解,并在需要时创建新文件夹。 mkdirs() 无法区分目录中的文件

所以,如果你这样调用它:

databaseFile.mkdirs("/sdcard/rootDir/resDir/myImage.png");

它将创建一个名为 myImage.png 的文件夹。

请检查您的代码并根据需要进行更改。

关于java - android 将数据库从 Assets 复制到 sdcard - 打开失败 : EISDIR (Is a directory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722194/

相关文章:

java - 如果目录以点开头,File.getCanonicalPath() 返回错误

java - Android Studio 中的模块图标是什么意思?

android - 如果 SurfaceView 尺寸不是支持的尺寸之一,camera2 将崩溃

android - ActionBar 中的 SearchView - 搜索未答复

android - 如何在 MapBox 上显示房屋号码?

java,从多个图像合成图像

java - 使用 kafka 时将 Java 转换为 Avro 并返回

java - Android 访问使用 -e 发送的数据

C# 安卓 : Get Broadcast Receiver on a service?

java - Map 的 keySet() 和 entrySet() 的性能注意事项