这是我从资产文件夹复制数据库到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的文件夹。
请检查您的代码并根据需要进行更改。