2

这是我的 Android sdcard 上的目录结构

 sdcard/alQuranData/Reader1/Surah

这是我制作目录的代码

File SDCardRoot = new File(Environment.getExternalStorageDirectory().toString() + "alQuranData/Reader1/Surah");
                Toast.makeText(getApplicationContext(), SDCardRoot.toString(), Toast.LENGTH_LONG).show();
                if (!SDCardRoot.exists()) {
                    Log.d("DIRECTORY CHECK", "Directory doesnt exist creating directory");
                    SDCardRoot.mkdir();
                }

现在alQuranData已经在我的sdcard根目录中创建了。如果我只创建 Reader1 目录,那么它可以正常工作,但是添加的时候Reader1/Surah比它没有创建。

我也试过mkdirs(),但它不起作用。

4

4 回答 4

2

您是否收到任何错误或异常。请尝试检查mkdirs()方法调用的返回值。还可以尝试以下代码:

File SDCardRoot = new File(Environment.getExternalStorageDirectory().toString() + "/alQuranData/Reader1/Surah");
Toast.makeText(getApplicationContext(), SDCardRoot.toString(), Toast.LENGTH_LONG).show();
if (!SDCardRoot.exists()) {
    Log.d("DIRECTORY CHECK", "Directory doesnt exist creating directory");
    SDCardRoot.mkdirs();
}

还请检查您是否在清单文件中添加了以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我刚刚测试了以下代码,它正在为我工​​作:

File SDCardRoot = new File(Environment.getExternalStorageDirectory()
        .toString() + "/alQuranData/Reader1/Surah");
Toast.makeText(getApplicationContext(), SDCardRoot.toString(),
        Toast.LENGTH_LONG).show();
if (!SDCardRoot.exists()) {
    Log.d("DIRECTORY CHECK",
            "Directory doesnt exist creating directory "
                    + Environment.getExternalStorageDirectory()
                            .toString());
    boolean outcome = SDCardRoot.mkdirs();

    Log.d("DIRECTORY CHECK",
            "outcome for " + SDCardRoot.getAbsolutePath() + "     "
                    + outcome);
}

如您的帖子中所述,我已经手动添加了 alQaranData 文件夹并添加了权限,它在我的最后开始工作。请检查此代码。

于 2012-10-09T05:16:04.853 回答
0

使用 Java,您不能一次创建多个目录。您将需要一个一个声明一个文件夹名称并继续创建一个目录。所以首先创建

  1. 古兰经数据
  2. alQuranData/Reader1/
  3. alQuranData/Reader1/Surah

使用您提供的同一段代码。

于 2012-10-09T04:27:45.697 回答
0

使用此代码.....)

  private void createSdCatalogs(String str1){
    //str1 = "/alQuranData"
File folder = new File(Environment.getExternalStorageDirectory() + str1);
boolean success = false;
if (!folder.exists()) {
    success = folder.mkdir();
    Log.v("Adding line", "/");
}}
private void createSdCatalogs(String str2)   { 
//str2 = "/alQuranData/Reader1";
File folder1 = new File(Environment.getExternalStorageDirectory() + str2);
boolean success1 = false;
if (!folder1.exists()) {
    success1 = folder1.mkdir();
    Log.v("Adding line", "/");
}

}
于 2012-10-09T04:20:40.707 回答
-1

默认情况下,android 无法一次创建多个目录。您必须一一创建并检查是否创建。

但我创建了一个下面的代码来实现类似的目标。您可以使用一次创建多个目录...


public static boolean recursivelyMakeDir(File endDirectory,File baseDir) {

        if (!baseDir.exists()){
            return false;
        }
        ArrayList<String> allDirectoryList = parseAndGetListDir(endDirectory.getAbsolutePath().substring(baseDir.getAbsolutePath().length()));

        File  currentDir = baseDir;

        for (int i=0; i< allDirectoryList.size() ; i++){

            File dir = new File(currentDir.getAbsolutePath() + "/" + allDirectoryList.get(i) );

            if (!dir.exists()){

                if (!dir.mkdir()){
                    return false;
                }
            }

            currentDir  = dir;
        }

        return true;
    }

    public static ArrayList<String> parseAndGetListDir(String data) {

        ArrayList<String> allDirectoryList = new ArrayList<>();
        boolean exit = false;
        String dir = "";

        for (int i=0; i<data.length() ; i++){

            if (data.charAt(i) == '/'){
                if (!dir.equals("")){
                    allDirectoryList.add(dir);
                    dir = "";
                }
            }else {
                dir = dir + data.charAt(i);
            }

        }

        if (!dir.equals("")){
            allDirectoryList.add(dir);
        }

        return allDirectoryList;
    }

用法 :

// you 100% sure that this  directory is already exist.
File baseDir = Environment.getExternalStorageDirectory();

// desire directory wanted to create.
File endDirectory = new File(Environment.getExternalStorageDirectory() +"kkk/SSS/aaa/ddd/b");

if(recursivelyMakeDir(endDirectory ,baseDir )){

  // dir created sucessessfully
}else{
  // failed
}

于 2022-01-04T15:35:23.643 回答