Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 目录&;Android文件系统上的文件创建_Java_Android_Io_Filesystems - Fatal编程技术网

Java 目录&;Android文件系统上的文件创建

Java 目录&;Android文件系统上的文件创建,java,android,io,filesystems,Java,Android,Io,Filesystems,我试图创建一个目录层次结构,然后将一个文件从我的资产复制到新创建的目录中。我已经在stackoverflow上使用了这里提供的代码示例,但是我没有得到任何结果。基本上我的代码是这样的: InputStream in = getAssets.open(mydb.sqlite); File dir = new File("/data/data/my.package/databases/"); dir.mkdirs(); out = new FileOutputStream("/data/data/

我试图创建一个目录层次结构,然后将一个文件从我的资产复制到新创建的目录中。我已经在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
这一切都是在第一次发射时的主要活动中完成的,当然只能完成一次。在代码运行之前,唯一存在的目录是/data/。是的,它是一个数据库文件,但这一点不重要,因为我只是复制文件,还没有尝试使用数据库代码访问它

代码不会抛出任何异常,dir.mkdirs()返回true。无论如何,不会创建目录,也不会复制文件。我已经将WRITE_EXTERNAL_存储的权限行添加到我的清单中,正如在几个地方所建议的那样,FWIW。我可以一步一步地完成代码,一切看起来都很好。当然不是

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


编辑:以下是我学到的。getDir()在/data/data/my.package/app.*中创建目录。不确定它为什么在目录名上使用此前缀。如果您需要将某些内容放在标准位置(如数据库/或文件/)中,那么这将不起作用。请改用openFileOutput,因为/data/data是内部存储,您应该只使用Android API在那里获取文件句柄。见:

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

编辑2: 从getDir文档:

您可以使用返回的文件对象创建和访问此目录中的文件


此外,写入/data/data/directory不需要WRITE\u EXTERNAL\u存储权限根据文档,openFileOutput()不接受file name参数中的路径分隔符。getDir()具有相同的限制。我需要将目录设置为/data/data/my.package/databases/,因为SQLiteOpenHelper希望在这里查找数据库。我错过什么了吗?