0
有人可以請指出這裏出了什麼問題:Android遞歸文件搜索
下面的代碼循環遍歷/ SD卡上的目錄。如果它找到一個文件,它將名稱等添加到數組中。如果它找到一個目錄,它就會進入並掃描它。
system.out返回/ sdcard上的所有文件。
的陣列適配器僅列出其發現的在頂級目錄
在我的SD卡,我期待它返回兩個mp3文件,一個在頂級目錄樹中的一個安葬。 system.out行找到兩者。
我懷疑fls arraylist正在銷燬。如果是這樣,我該如何去保存這個?
在此先感謝!
public void fill(File f) {
File[]files = f.listFiles();
List<Option>fls = new ArrayList<Option>();
if (files != null) {
for(File ff: files){
if(!ff.isDirectory())
{
/** Only Add MP3's to the list */
String filename=ff.getName();
String ext = filename.substring(
filename.lastIndexOf('.')+1, filename.length());
if(ext.equals("MP3")||ext.equals("mp3")||ext.equals("Mp3")||ext.equals("mP3"))
fls.add(new Option(ff.getName(),"File Size: "+ff.length()/1048576 + "MB",ff.getAbsolutePath()));
System.out.println(ff.getName());
}
else
fill(ff);
}
}
Collections.sort(fls);
adapter = new FileArrayAdapter(getActivity(),R.layout.folder_view,fls);
this.setListAdapter(adapter);
}
嗨,感謝您的回覆。我已經做出了改變,所以現在按我的意願工作。然而,它在頂級文件夾層面非常緩慢,它在那裏有效地掃描了整個SD卡。大約需要20秒來建立列表。任何優化這個建議?除非可以明顯優化,否則我可以簡單地將此功能固定在按鈕或長按操作上。 –
我能想到的唯一優化就是檢查文件擴展名有點不同。 (if)(ff.getName()。toLowerCase()。endsWith(「mp3」); 但是你需要測試才能看到速度差異,很可能你需要在各種各樣的asynctask中實現這個,我懷疑它可以足夠快到你不需要通知用戶的地方 – Jug6ernaut
哦,很好,如果沒有其他的東西,那就整理代碼,所以我會放棄它,我已經設置了跳過隱藏的目錄,以及作爲標準目錄(DCIM等)的列表跳過,另一種方法是讓用戶選擇一個文件夾並存儲它,說了這麼多,所有的音樂都在我的/音樂文件夾中,而且這需要很長的時間掃描爲上面的級別,這樣不會有幫助! –