Android内部存储和本地目录中的文件

3

Android提供了getDir函数(我假设这意味着我将在应用程序空间中拥有myappspace/somedirectory目录)来创建一个目录。但是,当您在openFileOutput/Input调用中使用路径分隔符时,Android会给出错误提示。那么,如何读取或写入该目录中的文件呢?

2个回答

6

getDir返回一个文件对象。要操作目录和文件结构,您仍需使用文件对象。例如:

File dir = getDir("myDir", Context.MODE_PRIVATE);
File myFile = new File(dir, "myFile");

openFileOutput函数根据一些文本标准简单地返回一个FileOutputStream。我们所要做的就是创建这个对象。

FileOutputStream out = new FileOutputStream(myFile);

从这里开始,您可以按照正常流程继续操作。

String hello = "hello world";
out.write(hello.getBytes());
out.close();

FileInputStream 也遵循相同的准则。


4
重点是openFileInput()openFileOutput()直接使用该目录中的文件,因此它们不需要绝对路径名。
编辑:更准确地说,它们与由getFilesDir()返回的目录中的文件一起工作,而不是getDir(),后者通常是包根目录。
如果您想相对于getDir()创建自定义目录,则需要使用其他类/方法(例如使用InputStreamOutputStream以及相关的文件“reader”/“writer”类)。

哦,如果我的应用程序中有x.txt文件和dummy/x.txt文件夹,那么安卓会怎么做呢? - arinte
@arinte:你所说的“应用空间”是什么意思? - Squonk
应用本地存储,但您已经基本回答了我的问题。我认为这是API中的漏洞。为什么有创建目录的便捷方法,却不支持其他便捷方法呢? - arinte
@arinte: 我认为,通常并不假定需要“正式”的目录结构,几乎所有的“工作”文件都可以放在应用程序的“/files”目录中。这将使它们保持在私有存储空间中,如果卸载应用程序,它将被清理掉。我认为这对大多数人来说都有效,但是如果你想要更复杂的结构,你需要准备使用更复杂的方法。我可以看到它的+/-优缺点,但基本上这就是我们要处理的东西。 - Squonk
@MisterSquonk getDir() 对我来说没有返回应用程序的/files目录,至少使用MODE_PRIVATE时是这样的。不确定为什么。现在我收到了关于 Titanium Backup 不备份我的应用程序数据的抱怨,因为它似乎只备份/files文件夹?唉... - SomeCallMeTim
我正在使用具有WORLD_WRITEABLE | WORLD_READABLE权限的getDir。然后我使用new FileInputStream(file);来读取它,但是我得到了权限被拒绝的异常。你能帮忙吗? - Muhammad Babar

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