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