Android从SD卡中读取所有的文件



2 down vote

Add a Method GetFiles() to your program. Call it to get an ArrayList<> of all the files. You can then use it to populate your listview. You need to provide String argument DirectoryPath.

The Function:

public ArrayList<String> GetFiles(String DirectoryPath) { ArrayList<String> MyFiles = new ArrayList<String>(); File f = new File(DirectoryPath); f.mkdirs(); File[] files = f.listFiles(); if (files.length == 0) return null; else { for (int i=0; i<files.length; i++) MyFiles.add(files[i].getName()); } return MyFiles; }

Usage Example:

@Override public void onCreate() { // Other Code ListView lv; ArrayList<String> FilesInFolder = GetFiles("/sdcard/somefolder"); lv = (ListView)findViewById(R.id.filelist); lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FilesInFolder)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { // Clicking on items } }); }

Make sure that the External Storage is Readable:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

To Filter files based on Name/Extension: How to acces sdcard and return and array with files off a specific format?

share | improve this answer
 
 
What does android.R.layout.simple_list_item_1 refer to? –   SiKni8  Aug 4 '13 at 4:05
 
This is just an example, but if you are curious, I used a sub-layout simple_list_item_1 for each list item in my listview "filelist" –   Sheharyar  Aug 4 '13 at 16:06
 
Can you provide some suggestion for this question: stackoverflow.com/questions/18045035/… –   SiKni8  Aug 4 '13 at 16:28
up vote 1 down vote
File mfile=new File("/sdcard"); File[] list=mfile.listFiles(); System.out.println("list"+mfile.listFiles().length); for(int i=0;i<mfile.listFiles().length;i++) { if(list[i].isHidden()) } System.out.println("hidden path files.."+list[i].getAbsolutePath()); } }

may this would help!!!

share | improve this answer
 
 
thanks a lot. I'll try this one. :) –   Jethro  Apr 27 '11 at 8:02
 
but im trying to display it in a ListView? is it possible with your code? –   Jethro  Apr 27 '11 at 8:04
2  
ya, but u hav to create ur logic –   Jazz  Apr 27 '11 at 8:35
up vote 0 down vote

Updated function:: use this for new apis

call function like this:

 searchForFileInExternalStorage("filename.ext"); 

@implementation

 public File searchForFileInExternalStorage(String filename) { File storage = Environment.getExternalStorageDirectory(); return searchForFileInFolder(filename, storage); } public File searchForFileInFolder(String filename, File folder) { File[] children = folder.listFiles(); File result; for (File child : children) { if (child.isDirectory()) { result = searchForFileInFolder(filename, child); if (result != null) { return result; } } else { // replace equals by equalsIgnoreCase if you want to ignore the // case of the file name if (child.getName().equals(filename)) { return child; } } } return null; }
share | improve this answer
 
up vote 0 down vote

public class FileActivity extends ListActivity {

String str; ArrayList<String> al; ArrayAdapter<String> adapter; ListView lv; @SuppressLint("SdCardPath") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.file_view); Intent int1=getIntent(); ArrayList<String> arr1=GetFiles(Environment.getExternalStorageDirectory().getPath()); adapter= new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1,arr1); lv = (ListView) findViewById(android.R.id.list); lv.setAdapter(adapter); } private ArrayList<String> GetFiles(String path) { ArrayList<String> arr2=new ArrayList<String>(); File file=new File(path); File[] allfiles=file.listFiles(); if(allfiles.length==0) { return null; } else { for(int i=0;i<allfiles.length;i++) { arr2.add(allfiles[i].getName()); } }

return arr2; }

@Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); }
2 down vote

Add a Method GetFiles() to your program. Call it to get an ArrayList<> of all the files. You can then use it to populate your listview. You need to provide String argument DirectoryPath.

The Function:

public ArrayList<String> GetFiles(String DirectoryPath) { ArrayList<String> MyFiles = new ArrayList<String>(); File f = new File(DirectoryPath); f.mkdirs(); File[] files = f.listFiles(); if (files.length == 0) return null; else { for (int i=0; i<files.length; i++) MyFiles.add(files[i].getName()); } return MyFiles; }

Usage Example:

@Override public void onCreate() { // Other Code ListView lv; ArrayList<String> FilesInFolder = GetFiles("/sdcard/somefolder"); lv = (ListView)findViewById(R.id.filelist); lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FilesInFolder)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { // Clicking on items } }); }

Make sure that the External Storage is Readable:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

To Filter files based on Name/Extension: How to acces sdcard and return and array with files off a specific format?

share | improve this answer
 
    
What does android.R.layout.simple_list_item_1 refer to? –   SiKni8  Aug 4 '13 at 4:05
    
This is just an example, but if you are curious, I used a sub-layout simple_list_item_1 for each list item in my listview "filelist" –   Sheharyar  Aug 4 '13 at 16:06
    
Can you provide some suggestion for this question: stackoverflow.com/questions/18045035/… –   SiKni8  Aug 4 '13 at 16:28
up vote 1 down vote
File mfile=new File("/sdcard"); File[] list=mfile.listFiles(); System.out.println("list"+mfile.listFiles().length); for(int i=0;i<mfile.listFiles().length;i++) { if(list[i].isHidden()) } System.out.println("hidden path files.."+list[i].getAbsolutePath()); } }

may this would help!!!

share | improve this answer
 
    
thanks a lot. I'll try this one. :) –   Jethro  Apr 27 '11 at 8:02
    
but im trying to display it in a ListView? is it possible with your code? –   Jethro  Apr 27 '11 at 8:04
2  
ya, but u hav to create ur logic –   Jazz  Apr 27 '11 at 8:35
up vote 0 down vote

Updated function:: use this for new apis

call function like this:

 searchForFileInExternalStorage("filename.ext"); 

@implementation

 public File searchForFileInExternalStorage(String filename) { File storage = Environment.getExternalStorageDirectory(); return searchForFileInFolder(filename, storage); } public File searchForFileInFolder(String filename, File folder) { File[] children = folder.listFiles(); File result; for (File child : children) { if (child.isDirectory()) { result = searchForFileInFolder(filename, child); if (result != null) { return result; } } else { // replace equals by equalsIgnoreCase if you want to ignore the // case of the file name if (child.getName().equals(filename)) { return child; } } } return null; }
share | improve this answer
 
up vote 0 down vote

public class FileActivity extends ListActivity {

String str; ArrayList<String> al; ArrayAdapter<String> adapter; ListView lv; @SuppressLint("SdCardPath") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.file_view); Intent int1=getIntent(); ArrayList<String> arr1=GetFiles(Environment.getExternalStorageDirectory().getPath()); adapter= new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1,arr1); lv = (ListView) findViewById(android.R.id.list); lv.setAdapter(adapter); } private ArrayList<String> GetFiles(String path) { ArrayList<String> arr2=new ArrayList<String>(); File file=new File(path); File[] allfiles=file.listFiles(); if(allfiles.length==0) { return null; } else { for(int i=0;i<allfiles.length;i++) { arr2.add(allfiles[i].getName()); } }

return arr2; }

@Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); }

你可能感兴趣的:(Android从SD卡中读取所有的文件)