ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-31 14:27:01  阅读:663  来源: 互联网

标签:android-file android


在我的应用程序中,当我尝试在应用程序内部存储下创建目录结构时,我看到很少崩溃,例如/ 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()无法创建它,这可能吗?

任何提示?

谢谢

解决方法:

使用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-file,android
来源: https://codeday.me/bug/20190831/1776017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有