android在手机中创建目录文件夹的时候,为什么有的手机可以创建出来有的手机无法创建出?

时间:2022-04-23 12:30:53
我在Android应用程序第一次安装开启后,先进入登录activity,登录成功,根据登录人的用户名创建本地文件夹
private void redirect() {
String userName = edtUserName.getText().toString().trim();
String pwd = edtPwd.getText().toString().trim();

String path = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ mContext.getString(R.string.dir)+ File.separator;



Log.e("---", "-----"+path);
File dir = new File(path);
if (!dir.exists() || !dir.isDirectory()) {// 如果不存在,新建
dir.mkdirs();
}


path=path+ File.separator +userName;

dir = new File(path);
if (!dir.exists() || !dir.isDirectory()) {// 如果不存在,新建
dir.mkdirs();
}

dir = new File(path+ File.separator +"database" );
if (!dir.exists() || !dir.isDirectory()) {// 如果不存在,新建
dir.mkdirs();
}

path = path + mContext.getString(R.string.file_dir);// 头像路径

dir = new File(path);
if (!dir.exists() || !dir.isDirectory()) {// 如果不存在,新建
dir.mkdirs();
}
path = path + File.separator + "portrait";// 头像路径

dir = new File(path);
if (!dir.exists() || !dir.isDirectory()) {// 如果不存在,新建
dir.mkdirs();
}
}

有的手机就可以创建出来 文件夹,有的手机创建不出文件夹

12 个解决方案

#1


你要判断手机是否有sd卡。
 String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    }

#2


1楼正解,先判断是否有sdcard

#3


有些手机,比如小米,插入usb连接到电脑上之后,很容易引起SD卡的挂载。
这样你的程序运行之后,就找不到SD卡了。
所以读写SD卡之前,先判断SD卡的状态。

#4


可是为什么有时候还会把文件夹创建出来呢?

#5


@chencaishengsic  @hjq2013  @Jack-sen  那么为什么我的程序有的时候还是会创建出来呢? 还是说这些手机本身就存在这种bug

#6


手机没有sdcard不能称之为bug

#7


我也遇到相同的问题,创建三个文件夹,其中一个无法创建,oppo手机

#8


如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}

#9


引用 8 楼 xiaoluoli88 的回复:
如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}
要是最低版本是基于4.0的难道也要动态获取权限吗

#10


引用 9 楼 yuanbatianxia 的回复:
Quote: 引用 8 楼 xiaoluoli88 的回复:

如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}
要是最低版本是基于4.0的难道也要动态获取权限吗
需不需要权限和你的当前开发targetSdkVersion的版本有关啊,和最低版本无关

#11


第一次不成功,有时需要创建第2、3次就成功了。。别问我为什么

#12


引用 11 楼 qq_34364155 的回复:
第一次不成功,有时需要创建第2、3次就成功了。。别问我为什么
android在手机中创建目录文件夹的时候,为什么有的手机可以创建出来有的手机无法创建出?为什么

#1


你要判断手机是否有sd卡。
 String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    }

#2


1楼正解,先判断是否有sdcard

#3


有些手机,比如小米,插入usb连接到电脑上之后,很容易引起SD卡的挂载。
这样你的程序运行之后,就找不到SD卡了。
所以读写SD卡之前,先判断SD卡的状态。

#4


可是为什么有时候还会把文件夹创建出来呢?

#5


@chencaishengsic  @hjq2013  @Jack-sen  那么为什么我的程序有的时候还是会创建出来呢? 还是说这些手机本身就存在这种bug

#6


手机没有sdcard不能称之为bug

#7


我也遇到相同的问题,创建三个文件夹,其中一个无法创建,oppo手机

#8


如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}

#9


引用 8 楼 xiaoluoli88 的回复:
如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}
要是最低版本是基于4.0的难道也要动态获取权限吗

#10


引用 9 楼 yuanbatianxia 的回复:
Quote: 引用 8 楼 xiaoluoli88 的回复:

如果是6.0开发,需要动态请求读写权限,否则无法创建,可以使用以下代码判断是否有权限
if (ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(PersonInforActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {请求权限}
要是最低版本是基于4.0的难道也要动态获取权限吗
需不需要权限和你的当前开发targetSdkVersion的版本有关啊,和最低版本无关

#11


第一次不成功,有时需要创建第2、3次就成功了。。别问我为什么

#12


引用 11 楼 qq_34364155 的回复:
第一次不成功,有时需要创建第2、3次就成功了。。别问我为什么
android在手机中创建目录文件夹的时候,为什么有的手机可以创建出来有的手机无法创建出?为什么