如何在ListView中显示SD卡上的文件?

时间:2011-04-27 07:52:24

标签: android listview sd-card

我想创建一个按钮,单击该按钮将转到使用ListView显示SD卡中所有媒体文件的类。

从列表中选择后,它将返回选择的文件名到主类。如果返回的文件是图像文件,它将显示在ImageView中,如果返回的文件是音频文件,它只会显示一个图标。

6 个答案:

答案 0 :(得分:7)

为您的计划添加方法GetFiles()。调用它来获取所有文件的ArrayList<>。然后,您可以使用它来填充listview。您需要提供String参数DirectoryPath

功能:

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

用法示例:

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

确保外部存储空间可读: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

根据名称/扩展程序过滤文件: How to acces sdcard and return and array with files off a specific format?

答案 1 :(得分:2)

首先,我强烈建议您先阅读一些关于android的教程,以便掌握基础知识。您必须执行以下操作才能执行此操作

  1. 列出所有媒体文件 - How to list all media in Android?
  2. Start new Activity
  3. Android: Capturing the return of an activity

答案 2 :(得分:1)

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

这可能会有所帮助!!!

答案 3 :(得分:1)

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

答案 4 :(得分:0)

更新的函数::将此用于新的apis

这样调用函数:

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

答案 5 :(得分:0)

这是一个正确的解决方案!或者我给你link这个东西!

public class SongsManager {
// SDCard Path
//choose your path for me i choose sdcard
final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>();

// Constructor
public SongsManager(){

}

/**
 * Function to read all mp3 files from sdcard
 * and store the details in ArrayList
 * */
public ArrayList<hashmap<string, string="">> getPlayList(){
    File home = new File(MEDIA_PATH);

    if (home.listFiles(new FileExtensionFilter()).length > 0) {
        for (File file : home.listFiles(new FileExtensionFilter())) {
            HashMap<string, string=""> song = new HashMap<string, string="">();
            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
            song.put("songPath", file.getPath());

            // Adding each song to SongList
            songsList.add(song);
        }
    }
    // return songs list array
    return songsList;
}

/**
 * Class to filter files which are having .mp3 extension
 * */
//you can choose the filter for me i put .mp3
class FileExtensionFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3") || name.endsWith(".MP3"));
    }
}
 }