2013-05-30 2 views
0

폴더 및 확장명이 ".mp3"인 하위 폴더의 목록을 가져 오려고하지만이 함수는 루트 폴더에서만 .mp3 파일을 반환합니다. 내가 잘못 무엇폴더와 하위 폴더에있는 모든 파일 목록 가져 오기

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

:

난`이

http://s1.ipicture.ru/uploads/20130530/Kiju7Bf7.png 소스 코드와 같은 구조의 모양을해야합니까? 폴더에있는 모든 파일을 얻기 위해 당신이 파일 사용의 특정 확장을 원하는 경우

+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(); 
     if (files.endsWith(".txt") || files.endsWith(".TXT")) 
     { 
      System.out.println(files); 
     } 
    } 
    } 
} 
} 
+0

파일의 확장자를 어떻게 확인할 수 있습니까? – DevSergio

+0

당신의 솔루션은 루트 폴더에있는 파일 만 반환하지만 .mp3 확장자를 가진 파일을 포함하는 폴더와 하위 폴더가있는 구조가 필요합니다. – DevSergio

+0

for 루프에 if를 추가하고 if (listOfFiles [i] .isFolder()) {String path = listOfFile [i] .getPath; 그런 다음 위의 메서드를 다시 호출하여 경로를 전달하십시오. 메서드를 accept (String path)로 선언하고 this.path = 경로를 선언해야합니다. – Lucarnosky

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

} 

을 시도해보십시오

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

완료. 그것을 지적 주셔서 감사합니다. –

관련 문제