访问Android应用程序内部存储器中的子目录以进行写入

访问Android应用程序内部存储器中的子目录以进行写入,android,fileoutputstream,android-internal-storage,Android,Fileoutputstream,Android Internal Storage,我已经在我的应用程序的内部存储器中创建了一个images子目录。因此,完整的路径是 /data/data/{app_namespace}/images 现在,我已经成功地创建了一个用于存储图像的uri/data/data/{app_namespace}/images/enh.jpeg 然而,当我想打开文件进行写作时,我分别使用的两种方法面临两个问题: FileOutputStream out=新的FileOutputStream(uri\u路径):没有这样的文件或目录 FileOutputStr

我已经在我的应用程序的内部存储器中创建了一个images子目录。因此,完整的路径是

/data/data/{app_namespace}/images

现在,我已经成功地创建了一个用于存储图像的uri
/data/data/{app_namespace}/images/enh.jpeg

然而,当我想打开文件进行写作时,我分别使用的两种方法面临两个问题:

  • FileOutputStream out=新的FileOutputStream(uri\u路径)
    :没有这样的文件或目录
  • FileOutputStream out=context.openFileOutput(uri\u path,context.MODE\u PRIVATE)
    :文件包含路径分隔符

  • 我想了解如何打开
    /data/data/{app_namespace}/images/enh.jpeg
    进行写作?还有其他我不知道的方法吗?

    我发现了这个问题。实际上,我正在构建
    uri\u path
    变量,如下所示

    uri\u path=uri.getPath()


    这只返回
    /images/enh.jpeg
    ,因为前面的部分是在
    uri
    authority
    字段中编码的。关于如何从
    Uri
    提取绝对路径,互联网上其他地方有多种解决方案,为了简洁起见,我将在这里省略

    我建议您使用标准位置,如
    getFilesDir()
    ,以及在这些位置下创建的子目录。@commonware您没有阅读这个问题吗?正如我所说,“images”目录在我的应用程序的内部存储下,我使用context.getFilesDir()检索它。不,不是
    /data/data/{app_namespace}/images
    不在
    getFilesDir()
    下。它是。我可以验证/data/data/{app_namespace}是getfiledir()返回的路径,在您的设备上,它可能是为您的帐户返回的路径。
    getFilesDir()
    的标准结果将以
    files/
    结尾,因为还有其他对等目录(例如,对于
    SharedReferences
    databases/
    对于默认的
    SQLiteDatabase
    位置)。前面的路径段将包括您的
    应用程序ID
    ,并且具有不同的根,尽管
    /data/data/
    是常见的。在大多数Android设备上,
    getFilesDir()
    将返回类似于
    /data/data/../files/
    的值。我不知道你的设备制造商对这个
    getFilesDir()
    值的想法。