在 Android 应用程序目录中创建文件夹列表

Posted

技术标签:

【中文标题】在 Android 应用程序目录中创建文件夹列表【英文标题】:Create list of Folders within Android app directory 【发布时间】:2014-05-11 17:26:44 【问题描述】:

我想列出位于 app 目录中的每个文件夹。 到目前为止,我可以扫描目录并列出已创建的每个文件夹并将每个文件夹记录到应用程序目录中存储到控制台。

我首先检查用户文件夹是否存在。如果没有,它将创建它,然后将变量“homeDir”设置为用户文件夹。

ArrayList<HashMap<String, String>> groupsList;

File homeDir;

private void isUserFolderExist() 

    File m_applicationDir = new File(this.getFilesDir() + "");
    File Userfolder = new File(m_applicationDir + "/" + uid);
    homeDir = Userfolder;
    //File directory = getDir(uid, Context.MODE_PRIVATE);

    //Log.v("creating", uid + " Folder");

    if (!Userfolder.exists()) 
        Userfolder.mkdir();
     else
        //Log.v("Directory", "exists");
    


然后我尝试为目录中找到的每个文件夹创建一个 ArrayList。通过在 AsyncTask 中使用下面的代码。我遵循了一些教程,这些教程展示了如何从 json 文件创建信息列表,并且我尝试应用相同的方法。

    class folders extends AsyncTask<String, String, String> 

    protected String doInBackground(String... args) 

        try 

            File directory = homeDir;

            File[] files = directory.listFiles();

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

                String dirId = Integer.toString(i);
                String name = files[i].getName();

                HashMap<String, String> groups = new HashMap<String, String>();

                groups.put("dirId", dirId);
                groups.put("name", name);

                groupsList.add(groups);

            
        catch (NullPointerException e)
            e.printStackTrace();
        catch (Exception e) 
            e.printStackTrace();
        
        return null;
    

    protected void onPostExecute(String file_url) 

        runOnUiThread(new Runnable() 
            public void run() 

                ListAdapter adapter = new SimpleAdapter(
                        MainActivity.this, groupsList,
                        R.layout.list_item, new String[]  "dirId", "name", new int[] 
                                R.id.dirId, R.id.name);

                setListAdapter(adapter);
            
        );

    


当它到达 groupsList.add(groups); 时,我遇到了 NullPointerException;

    04-01 16:10:12.273: W/System.err(336): java.lang.NullPointerException
    04-01 16:10:12.593: W/System.err(336):  at com.example.folder.MainActivity$folders.doInBackground(MainActivity.java:433)
    04-01 16:10:12.683: W/System.err(336):  at com.example.folder.MainActivity$folders.doInBackground(MainActivity.java:1)
    04-01 16:10:12.723: W/System.err(336):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
    04-01 16:10:12.733: W/System.err(336):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    04-01 16:10:12.733: W/System.err(336):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    04-01 16:10:12.733: W/System.err(336):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    04-01 16:10:12.733: W/System.err(336):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    04-01 16:10:12.733: W/System.err(336):  at java.lang.Thread.run(Thread.java:1096)

我没有找到发生这种情况的原因。

是因为我试图在 AsyncTask 中执行此操作吗?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我猜你没有没有初始化你的列表。因此,如果您尝试使用对象而不进行初始化,最终会导致 Null 指针异常。

尝试在 for 循环之前初始化您的 ArrayList..

groupsList = new ArrayList<HashMap<String, String>>();

【讨论】:

对不起,我错过了那一行。我已经用以下ArrayList&lt;HashMap&lt;String, String&gt;&gt; groupsList; 初始化了 groupList 是的,先生。嗨@hariharan sir am sethu 来自 Villupuram。我在 KCT 做了 ma UG。 @woody1990 这只是声明而不是初始化。你必须像我的回答一样初始化 @Hariharan 非常感谢。你是对的。我以为我已经初始化了它。我将ArrayList&lt;HashMap&lt;String, String&gt;&gt; groupsList; 行更改为` ArrayList> groupsList = new ArrayList>();` 修复了它。 @hariharan 先生,实际上我看到了你,这就是为什么我只是向你发送 ma msg 先生。

以上是关于在 Android 应用程序目录中创建文件夹列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在android外部存储目录中创建一个文件夹?

无法在 Android 11 中创建文件夹(目录),如何创建?

如何在应用程序包中创建和检查子目录

python 在目录中创建Markdown格式的文件列表

使用钛应用加速器在 Android 中创建粘性标题

如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?