2011-12-26 13 views
17

पर ढूंढने वाली सभी फाइलों और फ़ोल्डर्स को कैसे सूचीबद्ध करें मैंने एक प्रोग्राम बनाया है जो सभी फाइलों और फ़ोल्डरों (एफ एफ) को एसडी कार्ड पर ढूंढने की सूची देता है। यदि मैं सूची आइटम (यदि यह एक फ़ोल्डर है) में से किसी एक को स्पर्श करता है तो सूची उस फ़ोल्डर पर फ़ैफ़ ढूंढने को दिखाती है।एसडी कार्ड

यहाँ अब मैं दो प्रश्न

  1. है जब मैं "वापस" बटन को स्पर्श करें तो यह सूची वापस दो कदम स्रोत कोड

    public class FileList extends ListActivity 
    { 
    private File file; 
    private List<String> myList; 
    
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
    
        myList = new ArrayList<String>(); 
    
        String root_sd = Environment.getExternalStorageDirectory().toString(); 
        file = new File(root_sd + "/external_sd") ;  
        File list[] = file.listFiles(); 
    
        for(int i=0; i< list.length; i++) 
        { 
         myList.add(list[i].getName()); 
        } 
    
        setListAdapter(new ArrayAdapter<String>(this, 
          android.R.layout.simple_list_item_1, myList)); 
    
    } 
    
    protected void onListItemClick(ListView l, View v, int position, long id) 
    { 
        super.onListItemClick(l, v, position, id); 
    
        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(getApplicationContext(), file.toString(), Toast.LENGTH_LONG).show(); 
         setListAdapter(new ArrayAdapter<String>(this, 
           android.R.layout.simple_list_item_1, myList)); 
    
        } 
    
    } 
    
    
    @Override 
    public boolean dispatchKeyEvent(KeyEvent event) 
    { 
        if(KeyEvent.KEYCODE_BACK == event.getKeyCode()) 
        { 
         String parent = file.getParent().toString(); 
         file = new File(parent) ;   
         File list[] = file.listFiles(); 
    
         myList.clear(); 
    
         for(int i=0; i< list.length; i++) 
         { 
          myList.add(list[i].getName()); 
         } 
         Toast.makeText(getApplicationContext(), parent,   Toast.LENGTH_LONG).show(); 
         setListAdapter(new ArrayAdapter<String>(this, 
           android.R.layout.simple_list_item_1, myList)); 
    
    
        } 
    
        return true; 
    } 
    
    } 
    

    है। वर्तमान में सूची "बाहरी_एसडी/वीडियो/बांग्ला" के तहत एफ & एफ दिखा रही है। बैक बटन दबाए जाने के बाद सूची "बाहरी_एसडी/वीडियो /" के तहत एफ & एफ दिखा रही है, लेकिन "बाहरी_एसडी /" के तहत।

  2. क्या जावा में JFileChooser जैसे सभी f & f दिखाने के लिए कोई बेहतर समाधान है?

उत्तर

29

ऐसा लगता है कि जब आप dispatchKeyEvent वापस जाएं स्पर्श() प्राप्त दो बार KeyEvent KEYCODE_BACK, तो मैं आप इसे इस तरह से करना सुझाव देते हैं:

public class FileList extends ListActivity 
{ 
private File file; 
private List<String> myList; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    myList = new ArrayList<String>(); 

    String root_sd = Environment.getExternalStorageDirectory().toString(); 
    file = new File(root_sd + "/external_sd") ;  
    File list[] = file.listFiles(); 

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

    setListAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, myList)); 

} 

protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    super.onListItemClick(l, v, position, id); 

    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(getApplicationContext(), file.toString(), Toast.LENGTH_LONG).show(); 
     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, myList)); 

    } 

} 


@Override 
public void onBackPressed() { 
      String parent = file.getParent().toString(); 
      file = new File(parent) ;   
      File list[] = file.listFiles(); 

      myList.clear(); 

      for(int i=0; i< list.length; i++) 
      { 
       myList.add(list[i].getName()); 
      } 
      Toast.makeText(getApplicationContext(), parent,   Toast.LENGTH_LONG).show(); 
      setListAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, myList)); 


    } 
+0

धन्यवाद, आप अपने समय को बचाने के। –

+0

मेरा समय बचाने के लिए धन्यवाद .... – user4232

+0

@Rabgs: क्या आप कृपया कोड को विस्तृत कर सकते हैं। मैंने अभी आपके कोड का उपयोग किया था लेकिन एप्लिकेशन क्रैश त्रुटि –

0
import java.io.*; 
import java.util.*; 
public class DirUtils { 

    public static List recurseDir(String dir) { 
     String result, _result[]; 

     result = recurseInDirFrom(dir); 
     _result = result.split("\\|"); 
     return Arrays.asList(_result); 
    } 

    private static String recurseInDirFrom(String dirItem) { 
    File file; 
    String result,list[]; 

    result = dirItem; 

    file = new File(dirItem); 
    if (file.isDirectory()) { 
     list = file.list(); 
     File[] fileslist = file.listFiles(new MyDocFileFilter()); 
    if (fileslist != null) { 
     for (File file1: fileslist) { 
     System.out.println(file1.getAbsolutePath()); 
     } 
    } 
    else { 
     System.out.println("No Subdirectory Found."); 
    } 
     for (int i = 0; i < list.length; i++) 
     result = result + "\n" + recurseInDirFrom(dirItem + File.separatorChar + list[i]); 
     } 
    return result; 
    } 

static class MyDocFileFilter implements FileFilter 
{ 
    private final String[] myDocumentExtensions 
       = new String[] {".java", ".png", ".html", "class"}; 

    public boolean accept(File file) { 

    if (!file.isFile()) 
     return false; 

    for (String extension : myDocumentExtensions) { 
     if (file.getName().toLowerCase().endsWith(extension)) 
     return true; 
    } 
    return false; 
    } 
} 

    public static void main(String arg[]) { 
    DirUtils.recurseDir("your path "); 



    } 
} 
0
ArrayList<File> fileList = new ArrayList<File>(); 
public ArrayList<File> getfile(File dir,String fileType)//pass fileType as a music , video, etc.    
{ 
    File listFile[] = dir.listFiles(); 
    if (listFile != null && listFile.length > 0) 
    { 
     for (int i = 0; i < listFile.length; i++) 
     { 

      if (listFile[i].isDirectory()) 
      { 
       getfile(listFile[i],fileType); 

      } 
      else 
      { 
       if("doc".equals(fileType)) 
       { 
        if(listFile[i].getName().endsWith(".pdf") || listFile[i].getName().endsWith(".txt") || 
         listFile[i].getName().endsWith(".xml") || listFile[i].getName().endsWith(".doc") || 
         listFile[i].getName().endsWith(".xls") || listFile[i].getName().endsWith(".xlsx")) 
        { 
         fileList.add(listFile[i]); 
        } 
       } 
       else if("music".equals(fileType)) 
       { 
        if(listFile[i].getName().endsWith(".mp3")) 
        { 
         fileList.add(listFile[i]); 
        } 
       } 
       else if("video".equals(fileType)) 
       { 
        if(listFile[i].getName().endsWith(".mp4")) 
        { 
         fileList.add(listFile[i]); 
        } 
       } 
       else if("image".equals(fileType)) 
       { 
        if(listFile[i].getName().endsWith(".png") || listFile[i].getName().endsWith(".jpg") 
         || listFile[i].getName().endsWith(".jpeg") || listFile[i].getName().endsWith(".gif")) 
        { 
         fileList.add(listFile[i]); 
        } 
       } 
      } 
     } 
    } 
    return fileList; 
} 
4

सभी फाइलों को सूचीबद्ध करने के लिए और बाहरी भंडारण के फ़ोल्डरों, यदि आप getExternalStorageDirectory():

final String state = Environment.getExternalStorageState(); 

if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // we can read the External Storage... 
    getAllFilesOfDir(Environment.getExternalStorageDirectory()); 
} 
का उपयोग करना बेहतर है

कहाँ getAllFilesOfDir() recoursive विधि है:

private void getAllFilesOfDir(File directory) { 
    Log.d(TAG, "Directory: " + directory.getAbsolutePath() + "\n"); 

    final File[] files = directory.listFiles(); 

    if (files != null) { 
     for (File file : files) { 
      if (file != null) { 
       if (file.isDirectory()) { // it is a folder... 
        getAllFilesOfDir(file); 
       } 
       else { // it is a file... 
        Log.d(TAG, "File: " + file.getAbsolutePath() + "\n"); 
       } 
      } 
     } 
    } 
} 
0

इस करके txt फ़ाइलों के लिए:

public class TXTList extends Activity { 

    ArrayList<File> allTXT = new ArrayList<File>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_item); 
     searchTXTs(new File(Environment.getExternalStorageDirectory().getPath())); 

    } 

    private void searchTXT(File dir){ 
     File[] files = dir.listFiles(); 
//  Log.i("DIR", "Found " + files.length + " in " + dir.getAbsolutePath()); 
     for (File file : files) { 
      if(file.isFile() && isTXT(file)){ 
       allTXT.add(file); 
       Log.i("TXT", file.getName()); 
      }else if(file.isDirectory()){ 
       searchTXT(file.getAbsoluteFile()); 
      } 
     } 
    } 

    private boolean isTXT(File file){ 
     boolean is = false; 
     if(file.getName().endsWith(".txt")){ 
      is = true; 
     } 
     return is; 
    } 

} 
0

एक साधारण उदाहरण

File Lis=new File("FolderPatch"); 
    Lis.listFiles(new FilenameFilter() { 

     @Override 
     public boolean accept(File dir, String filename) { 
      Log.e(">>>>", filename+"<<<"); 
      return false; 
     } 
    }); 
संबंधित मुद्दे