Android中的Context.openFileOutput()使用哪个文件系统路径?

58

7
数据 > 数据 > 您的应用程序 ID > 文件 - user285594
3
需要对手机进行 Root 才能查看 /data/data 目录。 - tchelidze
4个回答

69
关于Context类的openFileOutput()方法,用于打开一个文件进行写入操作,它会写入到内部存储文件路径中,该路径与调用Context的getFilesDir()方法返回的路径相同。你可以根据文档来确定这一点:
"返回在文件系统上存储调用openFileOutput(String, int)方法创建的文件的绝对路径的目录。"

1
我希望文档能够清楚地说明位置可以移动,并且应该使用什么方法来查找位置(例如,在“另请参阅”部分添加getFilesDir())。非常感谢您的帮助,马克。 - Ollie C
1
@Ollie C:是的,没有交叉引用确实很奇怪。而在每个页面上都有继承内容(例如,在每个“Context”子类Javadoc中都有openFileOutput())的缺点之一是搜索变得有些痛苦。 - CommonsWare
@CommonsWare,我是一个新手,这可能看起来是一个天真的问题,但它与这个主题有关:当我尝试使用context.openFileOutput(this.fileName, Context.MODE_APPEND)将文件保存到我的外部存储器时,该方法不会抛出任何异常并正常执行,Context.getFilesDir()返回:/data/data/com.proj.myproject/files。但是当我检查我的手机的外部存储器并转到/Data时,它是空的。我已经在清单中添加了WRITE_EXTERNAL_STORAGE权限。那么它应该在哪里保存文件呢?感谢您的帮助! - powernit
1
@powernit:openFileOutput()内部存储。你手机的“外部存储”可能是外部存储,也可能是可移动存储,但这些都不是同一件事情。 - CommonsWare
谢谢@CommonsWare:如果我正在使用openFileOutput()存储任何内容,则只有应用程序可以读取和写入它,且对于该应用程序是私有的。因此,只有上下文中的应用程序才能看到它。这个见解真的帮了我。 - powernit

19

在DDMS中,我发现我的文件位于:

data > data > your app id > files

2
我的数据文件夹总是看起来是空的,你有什么想法我可能错过了什么? - Victor Basso
可能你的手机有多个存储空间,现在许多手机都有几GB的内部存储空间,称为“sd0”(根据制造商而异,有些制造商可能会选择其他名称),同时也允许您插入外部存储设备,如SD卡,它将被称为“sd1”,在查找应用程序数据之前,您必须选择正确的存储空间。 - Craig Zheng
4
您的手机需要进行Root,否则数据文件夹将显示为空。 - Ε Г И І И О

3

您可以通过调用Context#getFileStreamPath(String)来检索该文件路径:

返回使用openFileOutput(String, int)创建的文件存储在文件系统上的绝对路径。

它返回一个File,因此然后调用File#getAbsolutePath()

总结一下:

context.getFileStreamPath(name).getAbsolutePath()

2
这个文件的路径是相对于设备内存中你的应用程序而言的。你可以使用 ddms 查看该位置,但是当你使用这个 Context.openFileOutput() 时,不需要关心任何绝对路径。
如果你想在文件名之间传递,请考虑使用外部存储

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接