我从 Firebase 下载了 SQLite数据库。它保存到设备存储中( Android /数据/包名称/文件/下载)。我想将数据库保存到内部目录。 (例如使用资源文件夹)。我希望没有人可以在反编译应用程序后访问此文件。出现错误,这是什么问题?
private void downloadFileFirebase(){
storageReference = FirebaseStorage.getInstance().getReference("test.sqlite");
storageReference.getBytes(1024*1024).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
final String path =Environment.getExternalStorageDirectory().getAbsolutePath()
+ DB_PATH ;
try {
writeToFile(bytes , path);
Toast.makeText(MainActivity.this, "DONE", Toast.LENGTH_SHORT).show();
}catch (IOException e){
e.printStackTrace();
Toast.makeText(MainActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "FAILD", Toast.LENGTH_SHORT).show();
}
});
}
并且:
private void writeToFile(byte[] bytes, String filename) throws IOException {
FileOutputStream out = new FileOutputStream(filename);
out.write(bytes);
out.close();
}
错误:
java.io.FileNotFoundException: /storage/emulated/0/data/user/0/ir.seljad.sqlitechipher/databases (No such file or directory)
答案 0 :(得分:0)
Android POINTS *pointsmain = (POINTS*)malloc(sizeof(POINTS));
目录是内部存储目录。
data/files
和assets
目录是构建时资源目录,并且在电话上不存在。这意味着您无法在运行时将文件下载到其中。
raw
应用程序也无法访问files
目录,除非设备已植根并且您始终可以使用某种加密的数据库。
答案 1 :(得分:0)
Environment.getExternalStorageDirectory()将返回外部存储路径。不是内部的,您应该使用Context.getDatabasePath(String name)来检索内部数据库路径