2013-05-30 91 views
0

我嘗試獲取文件夾及其擴展名爲「.mp3」的子文件夾中的文件列表,但該函數僅在根文件夾中返回.mp3文件。獲取文件夾及其子文件夾中所有文件的列表

我真的需要一個結構,這個樣子的

http://s1.ipicture.ru/uploads/20130530/Kiju7Bf7.png 的源代碼:

private ListView lvFolders; 
private File file; 
private List<String> myList; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.folder, null); 
    lvFolders = (ListView) v.findViewById(R.id.lvFolders); 

    myList = new ArrayList<String>(); 

    String root_sd = Environment.getExternalStorageDirectory().toString(); 
    file = new File(root_sd); 
    addToSongs(file); 

    /*File list[] = file.listFiles(); 
    for (int i = 0; i < list.length; i++) { 
     myList.add(list[i].getName()); 
    }*/ 

    lvFolders.setAdapter(new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, myList)); 

    lvFolders.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int position, long arg3) { 
      File temp_file = new File(file, myList.get(position)); 

      if (!temp_file.isFile()) { 
       file = new File(file, myList.get(position)); 
       File list[] = file.listFiles(); 

       myList.clear(); 

       for (int i = 0; i < list.length; i++) { 
        myList.add(list[i].getName()); 
       } 
       Toast.makeText(getActivity(), file.toString(), 
         Toast.LENGTH_LONG).show(); 
       lvFolders.setAdapter(new ArrayAdapter<String>(
         getActivity(), android.R.layout.simple_list_item_1, 
         myList)); 
      } 
     } 
    }); 

    return v; 

} 

FilenameFilter textFilter = new FilenameFilter() { 
    public boolean accept(File dir, String name) { 
     return (name.endsWith(".mp3")); 
    } 
}; 

private void addToSongs(File home) { 
    for (File file : home.listFiles(textFilter)) { 
     if (file.isDirectory()) { 
      addToSongs(file); 
     } else { 
      myList.add(file.getAbsolutePath()); 
     } 
    } 
} 

什麼,我做錯了什麼?

+0

你有解決方案嗎? – Debugger

回答

0

試試這個

import java.io.File; 

    public class ListFiles 
    { 

    public static void main(String[] args) 
    { 

     // Directory path here 
     String path = "."; 

     String files; 
     File folder = new File(path); 
     File[] listOfFiles = folder.listFiles(); 

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

     if (listOfFiles[i].isFile()) 
     { 
     files = listOfFiles[i].getName(); 
     System.out.println(files); 
      } 
     } 
    } 

} 

爲了得到一個文件夾中的所有文件,如果你想要的文件使用的特定擴展這個

import java.io.File; 

public class ListFiles 
{ 

public static void main(String[] args) 
{ 

    // Directory path here 
    String path = "."; 

    String files; 
    File folder = new File(path); 
    File[] listOfFiles = folder.listFiles(); 

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

    if (listOfFiles[i].isFile()) 
    { 
    files = listOfFiles[i].getName(); 
     if (files.endsWith(".txt") || files.endsWith(".TXT")) 
     { 
      System.out.println(files); 
     } 
    } 
    } 
} 
} 
+0

我如何檢查文件的擴展名? – DevSergio

+0

你的解決方案只返回根文件夾中的文件,但我需要一個包含文件夾和子文件夾的結構,其中包含帶.mp3擴展名的文件 – DevSergio

+0

如果在for循環中使用if(listOfFiles [i] .isFolder() ){String path = listOfFile [i] .getPath;然後再次調用上面的方法傳遞路徑,顯然你必須讓方法接受(String path)並聲明this.path =路徑 – Lucarnosky

0

此代碼可以幫助:

public static void main(String[] args) 
{ 
    File file = new File("C:/MyDirectory"); 
    List<File> list = new ArrayList<File>(); 
    getMp3Files(file, list); 
    // Use list which contains the files with .mp3 extension 
} 

public static void getMp3Files(File rootfile, List<File> list) 
{  
    File[] files; 
    if(rootFile.isDirectory()) 
    { 
     files = rootfile.listFiles(); 
    } 
    else 
     return; 
    for (File file : files) 
    { 
     if(file.isDirectory()) 
     { 
      getMp3Files(file, list); 
     } 
     else 
     { 
      if(file.getName().endsWith(".mp3")) 
      { 
       list.add(file); 
      } 
     } 
    } 

} 
+0

我想你應該移動if語句之外的File []文件,因爲文件的範圍僅限於if語句。 – RyanDawkins

+0

完成。感謝您指出。 –

相關問題