gpt4 book ai didi

java - Android 文件系统上的目录和文件创建

转载 作者:行者123 更新时间:2023-12-01 15:12:29 24 4
gpt4 key购买 nike

我正在尝试创建一个目录层次结构,然后将文件从我的 Assets 复制到新创建的目录中。我已经使用了 stackoverflow 上提供的代码示例,但我没有得到任何结果。基本上我的代码是这样的:

InputStream in = getAssets.open(mydb.sqlite);
File dir = new File("/data/data/my.package/databases/");

dir.mkdirs();
out = new FileOutputStream("/data/data/my.package/databases/mydb.sqlite");
while ((len = in.read(buffer)) > 0)
{
out.write(buffer, 0, len);
}
out.flush();
out.close();
in.close

这一切都是在首次启动时的主要 Activity 中完成的,当然应该只完成一次。在代码运行之前,唯一存在的目录是/data/。是的,它是一个数据库文件,但此时这应该不重要,因为我只是复制该文件,尚未尝试使用数据库代码访问它。

代码不会抛出任何异常,并且 dir.mkdirs() 返回 true。无论如何,不​​会创建目录,也不会复制文件。我已将 WRITE_EXTERNAL_STORAGE 的权限行添加到我的 list 中,FWIW,正如多个地方所建议的那样。我可以单步执行代码,一切似乎都很好。但当然不是。

我需要在这里寻找什么?文件权限问题?为什么代码认为一切都在那里(即,当它到达复制代码时,它不会抛出 FileNotFoundException),但实际上文件系统上什么都没有?

编辑:这是我所学到的。 getDir() 在/data/data/my.package/app_* 中创建目录。不知道为什么它在目录名上使用这个前缀。如果您需要将某些内容放入标准位置(例如数据库/或文件/),则此方法将不起作用。

最佳答案

使用 openFileOutput 代替,因为/data/data 是内部存储,您应该只使用 Android API 来获取文件句柄。请参阅:http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

编辑:/data/data/my.package 由 openFileOutput/getDir 处理,因此您可以使用 getDir('databases',MODE_PRIVATE) 创建目录并在其中创建文件。

编辑2:来自 getDir 文档:

You can use the returned File object to create and access files in this directory.

关于java - Android 文件系统上的目录和文件创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com