这是我从资产文件夹复制数据库到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的文件夹。

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

07-27 15:56