SdCard读取文件和音乐

怎么从SdCard中读出音乐和文件呢?这里有几个简单的方法。

首先从SDcard中读取文件:

public class MainActivity extends Activity implements OnClickListener {
// 属性
private TextView tv;
private Button bt_status;
private Button bt_size;
private Button bt_picture;
private ListView listView;
private File[] files;
// handler对象
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 设置listView适配器
listView.setAdapter(new MyAdapter());
};
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化界面
initdata();


}


// listView适配器
class MyAdapter extends BaseAdapter {


@Override
public int getCount() {
// TODO Auto-generated method stub
return files.length;
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.item,
null);
}
ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
// 用bitmapfactory工厂类编译文件,把路径编译成图片
Bitmap bitmap = BitmapFactory.decodeFile(files[position]
.getAbsolutePath());
// 设置图片
iv.setImageBitmap(bitmap);
return convertView;
}


}


// 初始化界面的方法
private void initdata() {
tv = (TextView) findViewById(R.id.tv);
bt_status = (Button) findViewById(R.id.bt_status);
bt_size = (Button) findViewById(R.id.bt_size);
bt_picture = (Button) findViewById(R.id.bt_picture);
listView = (ListView) findViewById(R.id.listView);
bt_status.setOnClickListener(this);
bt_size.setOnClickListener(this);
bt_picture.setOnClickListener(this);


}


// 点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {


// 得到Sdcard的状态
case R.id.bt_status:
String state = Environment.getExternalStorageState();
tv.setText(state);


break;


// 得到Sdcard的总容量和剩余容量
case R.id.bt_size:
long space = Environment.getExternalStorageDirectory()
.getTotalSpace();
String fileSize = Formatter
.formatFileSize(MainActivity.this, space);
long freeSpace = Environment.getExternalStorageDirectory()
.getFreeSpace();
String free_Space = Formatter.formatFileSize(MainActivity.this,
freeSpace);
tv.setText("TotalSpace" + fileSize + "----freeSpace" + free_Space);


break;


// 显示图片
case R.id.bt_picture:
// 得到根目录文件夹
final File file = Environment.getExternalStorageDirectory();
// 扫描Sdcard是耗时操作,开启子线程 处理
new Thread() {


public void run() {
// 扫描Sdcard根目录中图片
filesGetFile(file);
// 扫描完成后用handler发一个空消息来提醒handler更新ui
handler.sendEmptyMessage(0);


}


// 扫描Sdcard根目录中图片的方法
private void filesGetFile(final File file) {
files = file.listFiles(new FileFilter() {


@Override
public boolean accept(File pathname) {
if (pathname.getAbsolutePath().endsWith(".png")
|| pathname.getAbsolutePath().endsWith(
".jpg")) {
return true;
}
return false;


}


});
};
}.start();


break;


default:
break;
}


}

}

上面这个是读取文件的,接下来说一下读取读取音乐文件的:

代码如下:

public class MainActivity extends Activity {
private TextView tv_size;
private TextView tv_shengyu;
private ListView listView;
private List<Music> list;
private Music music;
private File[] files;
private Handler handler = new Handler() {
public void handleMessage(Android.os.Message msg) {
// handler收到空消息以后,设置listview适配器
listView.setAdapter(new MyAdapter());
};
};
private MediaPlayer mediaPlayer;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList<Music>();
mediaPlayer = new MediaPlayer();
tv_size = (TextView) findViewById(R.id.tv_size);
tv_shengyu = (TextView) findViewById(R.id.tv_shengyu);
listView = (ListView) findViewById(R.id.listView);
// 得到sdcard根目录容量大小和剩余容量
setFileSize();


listView.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
try {
if(mediaPlayer!=null){
mediaPlayer.reset();
mediaPlayer.setDataSource(files[position].getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start();
}



} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
});
// 过滤Sdcard根目录的音乐文件
final File file = Environment.getExternalStorageDirectory();
new Thread() {



public void run() {
files = file.listFiles(new FileFilter() {


@Override
public boolean accept(File pathname) {
if (pathname.getAbsolutePath().endsWith(".mp3")) {
music = new Music();
// 得到文件名封装到music类
music.setName(pathname.getName());
// 得到音乐文件的大小,并格式化
String size = Formatter.formatFileSize(
MainActivity.this, pathname.length());
// 封装到music类
music.setSize(size);
// 将music类放入list集合
list.add(music);


return true;
}
return false;
}
});


// 查找完毕之后给handler发一个空消息
handler.sendEmptyMessage(0);


};
}.start();


}


// listview适配器
class MyAdapter extends BaseAdapter {


@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(MainActivity.this, R.layout.item, null);
TextView tv_name = (TextView) convertView
.findViewById(R.id.item_tv_name);
TextView tv_size = (TextView) convertView
.findViewById(R.id.item_tv_size);
tv_name.setText(list.get(position).getName());
tv_size.setText(list.get(position).getSize());
return convertView;
}


}


// 得到sdcard根目录容量大小和剩余容量的方法
private void setFileSize() {
long totalSpace = Environment.getExternalStorageDirectory()
.getTotalSpace();
String FileSize = Formatter.formatFileSize(MainActivity.this,
totalSpace);
tv_size.setText(FileSize);
long freeSpace = Environment.getExternalStorageDirectory()
.getFreeSpace();
String shengyu = Formatter.formatFileSize(MainActivity.this, freeSpace);
tv_shengyu.setText(shengyu);
}


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值