【问题标题】:Android File Permissions issues on FilesDir()FilesDir() 上的 Android 文件权限问题
【发布时间】:2020-07-07 23:15:58
【问题描述】:

我需要在我的应用程序中使用一个文件。如果我将文件上传到 Data/Data/APP/files 然后它会添加 -rw-rw-rw 权限,然后我可以在我的应用程序中使用它。如果我以编程方式将文件写入 getFilesDir() 完全相同的目录,我可以在同一目录中看到 2 个完全相同的文件,但是以编程方式保存的文件具有权限 -rw------- 然后我无法访问该文件我的应用程序使用 getfilesDir()。 这就是文件的保存方式:

    public void writeFileOnInternalStorage(Context mcoContext,String sFileName, String sBody){
        File file = new File(getApplicationContext().getFilesDir(), "");
        if(!file.exists()){
            file.mkdir();
        }

        try{
            File gpxfile = new File(file, sFileName);
            FileWriter writer = new FileWriter(gpxfile);
            writer.append(sBody);
            writer.flush();
            writer.close();

        }catch (Exception e){
            e.printStackTrace();

        }
    }

我怎样才能获得使用该文件的正确权限。这可能不是权限问题,可能是我保存文件的方式?它是一个 .graphml 扩展文件。

【问题讨论】:

  • getFilesDir() 不需要任何权限。
  • 如果我将文件上传到 Data/Data/APP/files 。这样的路径一开始并不存在。上传是什么意思?你到底在做什么?
  • File file = new File(Context.getFilesDir(), ""); 没有定义一个带名称的文件对象。它定义了一个目录。此外,该代码不会保存任何内容。它只创建一个 File 对象。
  • 就文件路径道歉而言,我只是人手不足,我想你会明白 getFilesDir() 将文件存储到哪里。我已经添加了完整的方法来保存文件。
  • File file = new File(getApplicationContext().getFilesDir(), ""); 这是一个令人困惑的说法。更好:File file = getApplicationContext().getFilesDir();.

标签: java android android-internal-storage


【解决方案1】:

无法访问您的文件是什么意思?

查看此文档 (https://developer.android.com/training/data-storage),您无需访问(读取和写入)应用程序特定目录中的文件的权限。


编辑:

我假设您已经将文件存储到磁盘。

请注意,在 App-Specific Directory 中读取和写入文件不需要权限。您可以使用这个简单的代码阅读它。

public File readFile(Context context, String fileName) {
    File file = new File(context.getFilesDir(), fileName);
    // do other stuff, like checking if the file exist, etc.
    return file;
}

不管是什么文件扩展名,只要文件存在,你就会得到。

其实已经有很多文章涉及到这个话题了,请看一下以更好地理解这个话题。

【讨论】:

  • 我有两个完全相同的文件,它们位于特定于应用程序的目录中,它们具有相同的名称和相同的内容。唯一的区别是它们添加到目录的方式和上面的权限相同。当我运行应用程序时,如果我使用带有 rwrwrw(uploaded) 的文件,显然其中只有一个文件,那么它工作正常,如果我使用保存的 rw---- 那么应用程序看不到它并抛出一个好像它不存在一样的错误?
  • 如何以编程方式选择其中一个?
  • 我不选择我删除一个或另一个,那是我执行的测试。上传时它会得到 rwrwrw 它可以工作,保存时它会得到 rw---- 它没有。相同的文件相同的目录,但不是同时存在。我需要能够保存而不是上传它,并且能够使用它。
  • 你选择?这与 i can see the 2 exact files in the same directory, 不匹配。
  • @HTBuild 我已经更新了我的答案,我敢肯定你会找到很多涵盖这个主题的博客,你应该看看它以更好地理解。
猜你喜欢
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2011-10-06
  • 2015-12-18
相关资源
最近更新 更多