Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Android上应用程序内部内存上的mkdirs()失败_Android_Android File - Fatal编程技术网

Android上应用程序内部内存上的mkdirs()失败

Android上应用程序内部内存上的mkdirs()失败,android,android-file,Android,Android File,在我的应用程序中,当我尝试在应用程序内部存储下创建目录结构时,我很少看到崩溃,例如/data/data/[pkgname]/x/y/z.. 下面是失败的代码: File clusterDirectory = new File(MyApplication.getContext().getFilesDir(), "store"); File baseDirectory = new File(clusterDirectory, "data"); if (!baseDirectory.exists())

在我的应用程序中,当我尝试在应用程序内部存储下创建目录结构时,我很少看到崩溃,例如
/data/data/[pkgname]/x/y/z..

下面是失败的代码:

File clusterDirectory = new File(MyApplication.getContext().getFilesDir(), "store");
File baseDirectory = new File(clusterDirectory, "data");
if (!baseDirectory.exists()) {
    if (!baseDirectory.mkdirs()) {
        throw new RuntimeException("Can't create the directory: " + baseDirectory);
    }
}
我的代码在尝试创建以下路径时引发异常:

java.lang.RuntimeException: Can't create the directory: /data/data/my.app.pkgname/files/store/data
“我的清单”指定了权限
,即使该权限不应用于此目的(由于Google Maps Android API v2,我的应用程序实际上需要此权限)

这似乎与手机无关,因为我在旧手机和新手机上都遇到了这个例外(上一次崩溃报告是Nexus4和Android 4.3)

我猜目录
/data/data/My.app.pkgname
首先不存在,但mkdirs()由于权限问题无法创建它,这可能吗

有什么提示吗

感谢使用将目录创建到内存中。方法检索并在需要时创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的文件对象创建和访问此目录中的文件。

// Create directory into internal memory;
File mydir = getDir("mydir", Context.MODE_PRIVATE);

// Create sub-directory mysubdir
File mySubDir = new File(mydir, "mysubdir");
mySubDir.mkdir();

// Get a file myfile within the dir mySubDir.
File fileWithinMyDir = new File(mySubDir, "myfile"); 
// Use the stream as usual to write into the file.
FileOutputStream out = new FileOutputStream(fileWithinMyDir);

例如

// Create directory into internal memory;
File mydir = context.getDir("mydir", Context.MODE_PRIVATE);
// Get a file myfile within the dir mydir.
File fileWithinMyDir = new File(mydir, "myfile"); 
// Use the stream as usual to write into the file.
FileOutputStream out = new FileOutputStream(fileWithinMyDir); 

对于嵌套目录,应该使用普通java方法。像

new File(parentDir, "childDir").mkdir();
因此更新的示例应为

// Create directory into internal memory;
File mydir = getDir("mydir", Context.MODE_PRIVATE);

// Create sub-directory mysubdir
File mySubDir = new File(mydir, "mysubdir");
mySubDir.mkdir();

// Get a file myfile within the dir mySubDir.
File fileWithinMyDir = new File(mySubDir, "myfile"); 
// Use the stream as usual to write into the file.
FileOutputStream out = new FileOutputStream(fileWithinMyDir);

谢谢,这对在应用程序存储中创建第一级目录很好(在我的例子中是“存储”),但是嵌套目录呢?在返回的一级文件上使用mkdirs()安全吗?@ventor85查看我的更新答案。我添加了一个创建嵌套目录的示例代码。有人知道更多吗?背景是什么?