簡體   English   中英

如何加快文件存儲訪問?

[英]How to speed up File Storage Access?

我正在嘗試獲取用戶內部存儲器上包含MP3文件的所有文件夾的列表。

這是我為此目的調用的遞歸函數-

public void listAllMusicFiles(String pathToDirectory) {
        String lastFolderPath = "";
        int mp3Count = 0;
        File f = new File(pathToDirectory);
        File[] files = f.listFiles();
        for (File inFile : files) {
            if (inFile.isDirectory()) {
                //reset last folder path
                lastFolderPath = "";
                Log.d("Directory ", inFile.getPath());
                listAllMusicFiles(inFile.getPath());
            } else {
                if (inFile.getAbsolutePath().endsWith(".mp3") || inFile.getAbsolutePath().endsWith(".MP3")) {
                    mp3Count++;
                    Log.wtf("MP3 Count", mp3Count + " ");

                    //add each folder only once
                    String folderName = inFile.getParentFile().getName();
                    String folderPath = inFile.getParentFile().getPath();
                    Log.e("FOUND in", folderPath);

                    //create a new Folder object
                    Folder currentFolder = new Folder(folderName, folderPath, mp3Count + "");

                    if (!lastFolderPath.equals(folderPath)) {
                        Log.d("NEW", folderPath);
                        lastFolderPath = folderPath;
                        folderArrayList.add(currentFolder);
                    } else {
                        Log.d("OLD", folderPath);
                        //find a Folder object in folderArrayList where the object's path matches current folderPath
                        for (Folder folder : folderArrayList) {
                            String currentPath = folder.getFolder_Path();
                            if (currentPath.equals(folderPath)) {
                                //found a match
                                //update count
                                folder.setFolder_Song_Count(mp3Count + "");
                            }
                        }
                    }
                }
            }
        }
    }

當我在設備上運行此代碼時,我可以在RecyclerView中列出所需的文件夾,但會延遲大約6-7秒。

我已經將此任務移至AsyncTask中,因此由於執行此操作過多,UIThread不會掛起。

但是,在提高文件系統性能方面我完全茫然。 請幫助。 謝謝 !

無需將currentFolder存儲在ArrayList中,而在下一步中遍歷完整列表以查找該文件夾並更新值,您可以像這樣簡單地使用HashMap

HashMap<String, Folder> folders = new HashMap<>();

    public void listAllMusicFiles(String pathToDirectory) {

        int mp3Count = 0;
        File f = new File(pathToDirectory);
        File[] files = f.listFiles();

        Folder folder;
        String folderName, folderPath;

        for (File inFile : files) {
            if (inFile.isDirectory()) {
                //reset last folder path
                Log.d("Directory ", inFile.getPath());
                listAllMusicFiles(inFile.getPath());
            } else {
                if (inFile.getAbsolutePath().endsWith(".mp3") || inFile.getAbsolutePath().endsWith(".MP3")) {
                    mp3Count++;
                    Log.wtf("MP3 Count", mp3Count + " ");

                    //add each folder only once
                    folderName = inFile.getParentFile().getName();
                    folderPath = inFile.getParentFile().getPath();

                    Log.e("FOUND in", folderPath);

                    if (folders.containsKey(folderPath)) {

                        folder = folders.get(folderPath);
                        folder.setFolder_Song_Count(mp3Count + "");
                        folders.put(folderPath, folder);
                    } else {

                        folder = new Folder(folderName, folderPath, mp3Count + "");
                        folders.put(folderPath, folder);
                    }

                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM