将文件保存到Android Studio中的内部目录

时间:2019-03-22 07:39:14

标签: android firebase firebase-storage

我从 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)

2 个答案:

答案 0 :(得分:0)

Android POINTS *pointsmain = (POINTS*)malloc(sizeof(POINTS)); 目录是内部存储目录。

data/filesassets目录是构建时资源目录,并且在电话上不存在。这意味着您无法在运行时将文件下载到其中。

raw应用程序也无法访问files目录,除非设备已植根并且您始终可以使用某种加密的数据库。

答案 1 :(得分:0)

Environment.getExternalStorageDirectory()将返回外部存储路径。不是内部的,您应该使用Context.getDatabasePath(String name)来检索内部数据库路径