简体   繁体   中英

Get a List of All the Files in a Folder and Its Subfolders with extension

I`m trying get list of files in folder and its subfolders with extension ".mp3" , but the function return .mp3 files only in root folder.

I`m need a structure look like this

http://s1.ipicture.ru/uploads/20130530/Kiju7Bf7.png The source code:

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());
        }
    }
}

What i'm doing wrong?

Try this

    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);
          }
      }
    }

}

For get all the files in a folder, if you want a specific extension of file use this

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);
        }
     }
  }
}
}

This code might help:

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);
            }
        }
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM