3

我想在 SDcard 中创建目录,我确实遵循:

  1. 我补充说:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />在清单中。
  2. 我通过:获取root_path public static final String ROOT_PATH = Environment.getExternalStorageDirectory().toString() + "/Hello_World/";,它返回 /storage/emulated/0/Hello_World(调试时获取)。

接下来,我运行以下代码:

File file = new File(Constants.ROOT_PATH);
int i = 0;
while (!file.isDirectory() && !file.mkdirs()) {
    file.mkdirs();
    Log.e("mkdirs", "" + i++);
}

我也尝试了这两种方法mkdirs(),但它在 logcat ( )mkdir()中显示了无限循环。Log.e("mkdirs", "" + i++);有时它起作用,但有时不起作用。谢谢你的帮助!
Update:我尝试了一些设备的代码:Nexus4、nexus7、Vega Iron、Genymotion、LG G Pro,然后只是 Vega Iron 按预期工作。??!?!?

4

4 回答 4

2

像这样尝试它会在sd card

String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/hello_world");    
myDir.mkdirs();

如果要检查该文件是否存在或不使用此代码

File file = new File (myDir, file_name);
if (file.exists ()) 
   // file exist 
else 
   // file not exist  

参考看看这个答案 Android将文件保存到外部存储

于 2014-03-19T04:08:25.333 回答
1

该错误是由它应该是引起&&的。您还应该检查媒体是否已安装。while (!file.isDirectory() && !file.mkdirs())while (!file.isDirectory() || !file.mkdirs())

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
    {
        if (DEBUG) {Log.d(TAG, "createSoundDir: media mounted");} //$NON-NLS-1$
        File externalStorage = Environment.getExternalStorageDirectory();
        if (externalStorage != null)
        {
            String externalStoragePath = externalStorage.getAbsolutePath();
            File soundPathDir = new File(externalStoragePath + File.separator + "Hello_World"); //$NON-NLS-1$

            if (soundPathDir.isDirectory() || soundPathDir.mkdirs())
            {
                String soundPath = soundPathDir.getAbsolutePath() + File.separator;
                if (DEBUG) {Log.d(TAG, "soundPath = " + soundPath);} //$NON-NLS-1$

            }
        }
    }

从我的一个项目中剪切和粘贴。

于 2014-03-19T06:48:53.413 回答
1

谢谢大家,终于找到问题所在了。问题出在while()循环中,我替换为

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) && !file.isDirectory()) {
file.mkdirs();
}

于 2014-03-19T08:07:39.553 回答
0

Environment.getExternalStorageDirectory().getAbsolutePath()如下使用...

public static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Hello_World/";

并在创建目录之前检查 SDCard 是否已安装,如下所示....

File file = new File(Constants.ROOT_PATH);
int i = 0;

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
      if(!file.exists()) {
          file.mkdir();
      }
}
于 2014-03-19T03:19:10.613 回答