4

在我的应用程序中,当我尝试在应用程序内部存储下创建目录结构时,我看到很少有崩溃,例如/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

我的清单指定了权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,即使为此目的不需要它(由于 Google Maps Android API v2,我的应用程序实际上是必需的)。

它似乎与手机无关,因为我在旧手机和新手机上都遇到了这个异常(最后的崩溃报告是带有 Android 4.3 的 Nexus 4)。

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

有什么提示吗?

谢谢

4

1 回答 1

5

使用getDir(String name, int mode)在内存中创建目录。Retrieve方法,如果需要,创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的 File 对象在此目录中创建和访问文件。


所以例子是

// 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);
于 2013-10-01T07:56:59.810 回答