Android 永久存储文件

Android 永久存储文件,android,Android,下面的代码暂时存储文件(我猜是在缓存中),但我需要永久存储文件,我该怎么做 public void downloadFile(){ StorageReference islandRef = storageRef.child("cliff.jpg"); File localFile = null; try { File cacheDir = getApplicationContext().get

下面的代码暂时存储文件(我猜是在缓存中),但我需要永久存储文件,我该怎么做

public void downloadFile(){
            StorageReference islandRef = storageRef.child("cliff.jpg");
            File localFile = null;
            try {
                File cacheDir = getApplicationContext().getCacheDir();
                localFile = File.createTempFile("images", ".jpg", cacheDir);
            } catch (IOException e) {
                e.printStackTrace();
            }
            islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {


                }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle any errors
                Log.i("msg", exception.toString());
                Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT).show();

            }
        });
public void downloadFile(){
StorageReference islandRef=storageRef.child(“cliff.jpg”);
File localFile=null;
试一试{
文件cacheDir=getApplicationContext().getCacheDir();
localFile=File.createTempFile(“images”、“.jpg”、cacheDir);
}捕获(IOE异常){
e、 printStackTrace();
}
islandRef.getFile(localFile).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
Log.i(“msg”,exception.toString());
Toast.makeText(getApplicationContext(),“Failed”,Toast.LENGTH_SHORT.show();
}
});

我们谈论的永久性有多大?如果卸载应用程序,数据是否会持续存在?一种解决方案是通过更改以下内容将数据存储在内部存储器中(仅应用程序可以访问,卸载应用程序时数据会被删除):

File cacheDir = getApplicationContext().getCacheDir();


如果你想要一个你自己和其他应用程序都可以轻松访问的文件,你应该获得外部存储的根目录,并在那里创建文件夹..使用类似的方法

File externalRoot = Environment.getExternalStorageDirectory();
File dir = new File (externalRoot .getAbsolutePath() + "/parentFolder/childFolder");
dir.mkdirs();
File file = new File(dir, "filename");
...
FileOutputStream f = new FileOutputStream(file);
...
请记住,您应该检查存储是否可写。这将对其他应用可见,如果您不想这样做


使用
getApplicationContext().getFilesDir();
将提供类似
/data/data/com.package/files的路径

要保存映像,必须通过这样做将其写入内部或外部存储器:

而不是:

File cacheDir = getApplicationContext().getCacheDir();
localFile = File.createTempFile("images", ".jpg", cacheDir);
使用:


我不知道firebase中的
StorageReference
是如何工作的,但我推断
.getFile
将内容流式传输到文件中。在这种情况下,此代码应该可以工作

永久定义即使卸载了应用程序,我也需要永久存储文件。在我使用DownloadManager进行相同用途之前。
File cacheDir = getApplicationContext().getCacheDir();
localFile = File.createTempFile("images", ".jpg", cacheDir);
File cacheDir = getApplicationContext().getFilesDir();
localFile = new File("images.jpg", cacheDir);