歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android的數據存儲和IO-SD卡文件浏覽器

Android的數據存儲和IO-SD卡文件浏覽器

日期:2017/3/1 10:15:08   编辑:Linux編程

Android的數據存儲和IO-SD卡文件浏覽器

創建項目:SDFileExplorer

運行項目結果:

布局文件:main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <!-- 顯示當前路徑的的文本框 -->
  8. <TextView
  9. android:id="@+id/path"
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_gravity="center_horizontal"
  13. />
  14. <!-- 列出當前路徑下所有文件的ListView -->
  15. <ListView
  16. android:id="@+id/list"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:divider="#000"
  20. />
  21. <!-- 返回上一級目錄的按鈕 -->
  22. <Button android:id="@+id/parent"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:background="@drawable/home"
  26. android:paddingTop="20dp"
  27. android:layout_gravity="center"/>
  28. </LinearLayout>

列表布局文件: line.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <!-- 定義一個ImageView,用於作為列表項的一部分。 -->
  8. <ImageView android:id="@+id/icon"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:paddingLeft="10dp"
  12. />
  13. <!-- 定義一個TextView,用於作為列表項的一部分。 -->
  14. <TextView android:id="@+id/file_name"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:textSize="16dp"
  18. android:gravity="center_vertical"
  19. android:paddingLeft="10dp"
  20. android:paddingTop="10dp"
  21. android:paddingBottom="10dp"
  22. />
  23. </LinearLayout>

Activity文件:SDFileExplorer.java

  1. package wwj.sdfileexplorer;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.widget.AdapterView;
  12. import android.widget.AdapterView.OnItemClickListener;
  13. import android.widget.Button;
  14. import android.widget.ListView;
  15. import android.widget.SimpleAdapter;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. public class SDFileExplorer extends Activity {
  19. ListView listView;
  20. TextView textView;
  21. //記錄當前的父文件夾
  22. File currentParent;
  23. //記錄當前目錄路徑下的所有文件的文件數組
  24. File[] currentFiles;
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.main);
  29. //獲取列出全部文件的ListView
  30. listView = (ListView)findViewById(R.id.list);
  31. textView = (TextView)findViewById(R.id.path);
  32. //獲取系統的SD卡的目錄
  33. File root = new File("/mnt/sdcard/");
  34. //如果SD卡存在
  35. if(root.exists()){
  36. currentParent = root;
  37. currentFiles = root.listFiles();
  38. //使用當前目錄下的全部文件、文件夾來填充ListView
  39. inflateListView(currentFiles);
  40. }
  41. //為ListView的列表項的單擊事件綁定監聽器
  42. listView.setOnItemClickListener(new OnItemClickListener() {
  43. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  44. long arg3) {
  45. // TODO Auto-generated method stub
  46. //用戶單擊了文件,直接返回,不做任何處理
  47. if(currentFiles[arg2].isFile())
  48. return;
  49. //獲取用戶單擊的文件夾下的所有文件
  50. File[] tmp = currentFiles[arg2].listFiles();
  51. if(tmp == null || tmp.length == 0){
  52. Toast.makeText(SDFileExplorer.this, "當前路徑不可訪問或該路徑下沒有文件", 20000).show();
  53. }
  54. else{
  55. //獲取用戶單擊的列表項對應的文件夾,設為當前的父文件夾
  56. currentParent = currentFiles[arg2];
  57. //保存當前的父文件夾內的全部文件和文件夾
  58. currentFiles = tmp;
  59. //再次更新ListView
  60. inflateListView(currentFiles);
  61. }
  62. }
  63. });
  64. //獲取上一級目錄的按鈕
  65. Button parent = (Button)findViewById(R.id.parent);
  66. parent.setOnClickListener(new OnClickListener() {
  67. public void onClick(View v) {
  68. // TODO Auto-generated method stub
  69. try{
  70. if(!currentParent.getCanonicalPath().equals("/mnt/sdcard")){
  71. //獲取上級目錄
  72. currentParent = currentParent.getParentFile();
  73. //列出當前目錄下所有文件
  74. currentFiles = currentParent.listFiles();
  75. //再次更新ListView
  76. inflateListView(currentFiles);
  77. }
  78. }catch (Exception e) {
  79. // TODO: handle exception
  80. e.printStackTrace();
  81. }
  82. }
  83. });
  84. }
  85. private void inflateListView(File[] files){
  86. //創建一個List集合,List集合的元素是Map
  87. List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
  88. for(int i = 0; i < files.length; i++){
  89. Map<String, Object> listItem = new HashMap<String, Object>();
  90. //如果當前File是文件夾,使用floder圖標;否則使用file圖標
  91. if(files[i].isDirectory()){
  92. listItem.put("icon", R.drawable.folder);
  93. }
  94. else{
  95. listItem.put("icon", R.drawable.file);
  96. }
  97. listItem.put("fileName", files[i].getName());
  98. //添加List項
  99. listItems.add(listItem);
  100. }
  101. //創建一個SimpleAdapter
  102. SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.line,
  103. new String[]{"icon","fileName"}, new int[]{R.id.icon, R.id.file_name});
  104. //為ListView設置Adapter
  105. listView.setAdapter(simpleAdapter);
  106. try{
  107. textView.setText("當前路徑為: " + currentParent.getCanonicalPath());
  108. }catch (Exception e) {
  109. // TODO: handle exception
  110. e.printStackTrace();
  111. }
  112. }
  113. }
Copyright © Linux教程網 All Rights Reserved