gpt4 book ai didi

android - 应用程序内部存储器上的 mkdirs() 在 Android 上失败

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:34 24 4
gpt4 key购买 nike

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

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

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

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

有什么提示吗?

谢谢

最佳答案

使用 getDir(String name, int mode)将目录创建到内部存储器中。方法 检索,如果需要创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的 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);

关于android - 应用程序内部存储器上的 mkdirs() 在 Android 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110816/

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