zhchzh1000 发表于 2013-2-7 10:04:03

android遍历sd卡中的所有文件

  最近做个上传图片功能,需要对sd中的所需要的图片进行上传,需要在sd卡中找到这个图片。具体方法如下:
file_row.xml:
   <?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />



directory_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 
 
TestGrid.java:
 
 import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ListView;

public class TestGrid   extends ListActivity {
 private static final FileFilter IMAGES_FILTER = new FileFilter() {
 
  public boolean accept(File f) {
   return f.isDirectory() || f.getName().matches("^.*?\\.(jpg|png|bmp|gif)$");
  }
 };
 private FileListAdapter fileList;

 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.directory_list);
  fill(new File("/"));
 }

 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && !fileList.isRoot()) {
   fill(fileList.getItem(1));
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
 private void fill(File folder) {
  List<File> files = new ArrayList<File>();
  files.add(folder);
  if (folder.getParentFile() != null)
   files.add(folder.getParentFile());
  for (File file : folder.listFiles(IMAGES_FILTER)) {
   files.add(file);
  }
  fileList = new FileListAdapter(this, R.layout.file_row, files);
  setListAdapter(fileList);
 }
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
  File file = fileList.getItem(position);
  if (file.isDirectory())
   fill(file);
  // TODO use image switcher to display selected images
 }
}
 
FileListAdapter.java
 
import java.io.File;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class FileListAdapter extends ArrayAdapter<File>{
 public FileListAdapter(Context context, int Resource,List<File> objects) {
  super(context,Resource,objects);
  // TODO Auto-generated constructor stub
 }
 
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
     TextView view = (TextView) super.getView(position, convertView, parent);
     File file = getItem(position);
     if (position == 0)
       view.setText(view.getResources().getString(R.string.current_folder) + file.getAbsolutePath());
     else if (position == 1 && !isRoot())
       view.setText(R.string.to_parent_folder);
     else
       view.setText(file.getName());
     return view;
   }
   public boolean isRoot() {
     return getItem(0).getParent() == null;
   }
 }

 
 
页: [1]
查看完整版本: android遍历sd卡中的所有文件