Sau khi hoàn thành chương trình sẽ trông như hình bên dưới:
Đầu tiên các bạn tạo một android project như hình bên dưới:
Đây là cấu trúc thư mục của project sau khi tạo xong:
- CustomListViewAdapter.java: lớp này là Adapter, đóng vai trò trung gian giữa giữ liệu(data) và ListView.
- MainActivity.java: lớp này chịu trách nhiệm hiển thị giao diện chính của chương trình.
- activity_main.xml: là file định nghĩa layout chính của chương trình.
- list_item.xml: là file định nghĩa layout của một item trong ListView.
Để có thể thao tác được với sdcard chúng ta phải thêm permission vào trong file AndroidManifest.xml
activity_main.xml:
list_item.xml:
CustomListViewAdapter.java:
public class CustomListViewAdapter extends BaseAdapter {
private LayoutInflater inflater;
private File[] listFile;
private Context context;
public CustomListViewAdapter(Context context, File file){
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listFile = file.listFiles();
}
@Override
public int getCount() {
return listFile.length;
}
@Override
public Object getItem(int position) {
return listFile[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
convertView = inflater.inflate(R.layout.list_item, null);
ImageView iv = (ImageView) convertView.findViewById(R.id.iv_icon);
TextView tvFileName = (TextView) convertView.findViewById(R.id.tv_file_name);
TextView tvFileSize = (TextView) convertView.findViewById(R.id.tv_file_size);
TextView tvDateModify = (TextView) convertView.findViewById(R.id.tv_date_modify);
File file = listFile[position];
long size = 0;
if(file.isDirectory()){
size = folderSize(file);
iv.setImageDrawable(context.getResources().getDrawable(R.drawable.folder_icon));
}
else{
iv.setImageDrawable(context.getResources().getDrawable(R.drawable.file_icon));
size = file.length();
}
tvFileName.setText(file.getName());
tvFileSize.setText(readableFileSize(size));
tvDateModify.setText(convertTime(file.lastModified()));
return convertView;
}
public static String readableFileSize(long size) {
if(size <= 0) return "0 B";
final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
public String convertTime(long time){
Date date = new Date(time);
Format format = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
return format.format(date).toString();
}
public static long folderSize(File directory) {
long length = 0;
for (File file : directory.listFiles()) {
if (file.isFile())
length += file.length();
else
length += folderSize(file);
}
return length;
}
}
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private ListView listView;
private CustomListViewAdapter adapter;
private File file;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (isExternalStorageWritable()) {
listView = (ListView) findViewById(R.id.lv_file_view);
file = Environment.getExternalStorageDirectory();
adapter = new CustomListViewAdapter(this, file);
listView.setAdapter(adapter);
}
else{
Toast.makeText(this, "Can not interact with External Storage!", Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
}
link dowload source project: source

Làm sao để đọc được tất cả file explorer hả đại ca, gồm cả .apk ,.tmp bla bla các kiểu :D
ReplyDeleteChương trình trên đọc được hết tất cả các file mà em :)
Deleteđang định xóa cái comment ,tối rảnh onl chỉ em vài cái nhé :D
ReplyDeletelin hỏng rùi bạn ơi!
ReplyDelete