Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> Android SD卡文件列表

Android SD卡文件列表

編輯:高級開發

MainActivity.Java

  Java代碼 收藏代碼

  1. package lee.sdcard;

  2.

  3. import Java.io.File;

  4. import Java.util.ArrayList;

  5. import Java.util.HashMap;

  6. import Java.util.List;

  7. import Java.util.Map;

  8. import android.app.Activity;

  9. import android.os.Bundle;

  10. import android.os.Environment;

  11. import android.view.VIEw;

  12. import android.widget.AdapterVIEw;

  13. import android.widget.GridVIEw;

  14. import android.widget.ListVIEw;

  15. import android.widget.SimpleAdapter;

  16. import android.widget.TextVIEw;

  17. import android.widget.Toast;

  18. import android.widget.AdapterVIEw.OnItemClickListener;

  19.

  20. public class MainActivity extends Activity {

  21. private ListView listVIEw; //文件目錄ListVIEw

  22. private GridVIEw toolbarGrid; //工具條

  23. private TextVIEw title; //標題-路徑

  24. private List fileName=null; //文件名稱

  25. private List fileNum=null; //記錄文件大少或者有多少個子目錄

  26. private List filePath=null; //文件路徑

  27. private List isFile=null; //是否文件夾

  28.

  29. private boolean flag = true;

  30. private String sdCardPath; //SD卡根路徑

  31. private String parentPath; //路徑的上級

  32.

  33. /** 底部菜單圖片 **/

  34. int[] menu_toolbar_image_array = {

  35. R.drawable.menu_paste,

  36. R.drawable.controlbar_back,

  37. R.drawable.menu_penselectmodel,

  38. R.drawable.menu_quit };

  39.

  40. /** 底部菜單文字 **/

  41. String[] menu_toolbar_name_array = { "主目錄", "返回", "確定", "退出" };

  42.

  43.

  44. public void toast(String msg){

  45. Toast.makeText(this, msg, 1).show();

  接上頁

  46. }

  47.

  48. @Override

  49. public void onCreate(Bundle savedInstanceState) {

  50. super.onCreate(savedInstanceState);

  51. setContentVIEw(R.layout.main);

  52.

  53.

  54. if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

  55.

  56. toast("Sd卡不存在");

  57. }

  58. sdCardPath=Environment.getExternalStorageDirectory().getPath();

  59.

  60. // File fff=new File(sdCardPath+"/test/ddd");

  61. // if(!fff.exists())fff.mkdirs();

  62.

  63.

  64. listView=(ListView) findViewById(R.id.list_vIEw);

  65. title=(TextView) findVIEwById(R.id.title2);

  66.

  67.

  68. getFileDir(sdCardPath);

  69.

  70.

  71.

  72.

  73. // 創建底部菜單 Toolbar

  74. toolbarGrid = (GridView) findViewById(R.id.filedir_toolbar); //獲取底部的GridVIEw控件

  75. toolbarGrid.setNumColumns(4); // 設置每行列數

  76.

  77. toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,menu_toolbar_image_array));// 設置菜單Adapter。調用getMenuAdapter方法構造MAP參數

  78.

  79. /** 監聽底部菜單選項 **/

  80. toolbarGrid.setOnItemClickListener(new OnItemClickListener() {

  81. public void onItemClick(AdapterView arg0, VIEw arg1, int arg2,long arg3) {

  82. switch (arg2) {

  83. case 0: //首頁

  84. getFileDir(sdCardPath);

  85. break;

  86.

  87. case 1: //返回

  88. getFileDir(parentPath);

  89. title.setText("路徑:"+parentPath);

  90. break;

  91. case 2:

  92. // TODO Auto-generated method stub

  93.

  94.

  95. break;

  96. case 3:

  97. MainActivity.this.finish();

  接上頁

  98. break;

  99. }

  100. }

  101. });

  102.

  103.

  104.

  105.

  106.

  107.

  108. }

  109.

  110. /**

  111. * 構造菜單Adapter

  112. * @param menuNameArray 名稱

  113. * @param imageResourceArray 圖片

  114. * @return SimpleAdapter

  115. */

  116. private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {

  117. ArrayList> data = new ArrayList>();

  118. for (int i = 0; i < menuNameArray.length; i++) {

  119. HashMap map = new HashMap();

  120. map.put("itemImage", imageResourceArray[i]);

  121. map.put("itemText", menuNameArray[i]);

  122. data.add(map);

  123. }

  124. SimpleAdapter simperAdapter = new SimpleAdapter(

  125. this, //上下文

  126. data, //數據

  127. R.layout.item_menu, //綁定的視圖

  128. new String[] { "itemImage", "itemText" }, //綁定數據源對應的標題

  129. new int[] { R.id.item_image, R.id.item_text }); //綁定視圖對應的控件

  130. return simperAdapter;

  131. }

  132.

  133. /**

  134. * 獲取路徑的子目錄列表

  135. * @param path 路徑

  136. */

  137. private void getFileDir(String path) {

  138.

  139. File f = new File(path); //建立文件

  140. if(!path.equals(sdCardPath)){ //判斷文件是否SD卡根路徑

  141. parentPath = f.getParent(); //如果不是根路徑就獲取該路徑的上級路徑

  142. }else

  143. parentPath = sdCardPath; //如果是根路徑就

  144.

  145.

  146.

  147. //初始化存放個數據的List

  148. fileName = new ArrayList();

  149. fileNum = new ArrayList();

  150. filePath = new ArrayList();

  接上頁

  151. isFile = new ArrayList();

  152.

  153.

  154. File file=new File(path); //獲取接收進來的路徑

  155. int fileSize = file.list().length; //獲取路徑一共有多少個子文件

  156.

  157. //第一次遍歷存放文件夾

  158. for(int i=0;i< p>

  159. File fileChild=new File(path, file.list()[i]); //定義子文件

  160. if(fileChild.isDirectory() && !fileChild.isHidden()){ //判斷子文件是否文件夾並且不是隱藏文件

  161. fileName.add(fileChild.getName()); //獲取子文件的名稱

  162. fileNum.add(String.valueOf(fileChild.list().length)+"個子文件"); //獲取子文件裡面有幾個子文件

  163. filePath.add(fileChild.getPath()); //獲取子文件的路徑

  164. isFile.add(true); //標記是否文件夾

  165. }

  166. }

  167.

  168. //第2次遍歷放圖片文件

  169. for(int i=0;i< p>

  170. File fileChild=new File(path, file.list()[i]);

  171. if(fileChild.getName().endsWith(".jpg")){ //判斷後綴是圖片

  172. fileName.add(fileChild.getName());

  173. fileNum.add(String.valueOf(formatSize(fileChild.length()))); //格式化圖片大少,顯示KB/MB/GB

  174. filePath.add(file.getPath());

  175. isFile.add(false);

  176. }

  177. }

  178.

  179.

  180. String[] str={"fileImage","fileName","isFileImage","fileNum","filePath"};

  181. List> list =new ArrayList>();

  182. for(int i=0;i< p>

  183. Map map =new HashMap();

  184.

  185. map.put("fileName", fileName.get(i));

  186. map.put("filePath", filePath.get(i));

  187. map.put("fileNum", fileNum.get(i));

  188.

  189. //判斷是文件夾還是圖片,顯示不同的圖片

  190. if(isFile.get(i)){

  191. map.put("fileImage", R.drawable.image_folder);

  接上頁

  192. map.put("isFileImage", R.drawable.list_icon);

  193. }else if(fileName.get(i).endsWith(".jpg")){

  194. map.put("fileImage", R.drawable.imagefile);

  195. map.put("isFileImage", R.drawable.list_icon);

  196. }

  197. list.add(map);

  198. }

  199.

  200.

  201. SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,

  202. list,

  203. R.layout.filedir_item,

  204. str,

  205. new int[]{R.id.item_image,R.id.item_name,R.id.item_icon,R.id.item_num});

  206.

  207. listVIEw.setAdapter(adapter);

  208.

  209. listVIEw.setOnItemClickListener(new OnItemClickListener() {

  210.

  211. @Override

  212. public void onItemClick(AdapterView parent, View vIEw,int position, long id) {

  213.

  214. Map map=(Map) parent.getItemAtPosition(position); // 獲取點擊的Item所綁定的數據

  215. getFileDir(map.get("filePath").toString()); //獲取點擊文件夾路徑

  216. title.setText("路徑:"+map.get("filePath").toString()); //設置標題文字

  217. }

  218. });

  219. }

  220.

  221.

  222.

  223. /**

  224. * 格式化文件大少,顯示KB/MB/GB

  225. * @param size

  226. * @return 返回格式化的字符串

  227. */

  228. private String formatSize(long size) {

  229. long SIZE_KB = 1024;

  230. long SIZE_MB = SIZE_KB * 1024;

  231. long SIZE_GB = SIZE_MB * 1024;

  232.

  233. if(size < SIZE_KB) {

  234. return String.format( "%d B" , (int) size);

  235. } else if(size < SIZE_MB) {

  236. return String.format( "%.2f KB" , (float)size / SIZE_KB);

  237. } else if(size < SIZE_GB) {

  238. return String.format( "%.2f MB" , (float)size / SIZE_MB);

  接上頁

  239. } else {

  240. return String.format( "%.2f GB" , (float)size / SIZE_GB);

  241. }

  242. }

  243.

  244.

  245.

  246.

  247. // @Override

  248. // public boolean onKeyDown(int keyCode, KeyEvent event) {

  249. // if(keyCode==KeyEvent.KEYCODE_BACK){

  250. // if(parentPath!=null)

  251. // getFileDir(parentPath);

  252. // return true;

  253. // }

  254. //

  255. //

  256. // return super.onKeyDown(keyCode, event);

  257. // }

  258. }

  package lee.sdcard;

  import Java.io.File;

  import Java.util.ArrayList;

  import Java.util.HashMap;

  import Java.util.List;

  import Java.util.Map;

  import android.app.Activity;

  import android.os.Bundle;

  import android.os.Environment;

  import android.view.VIEw;

  import android.widget.AdapterVIEw;

  import android.widget.GridVIEw;

  import android.widget.ListVIEw;

  import android.widget.SimpleAdapter;

  import android.widget.TextVIEw;

  import android.widget.Toast;

  import android.widget.AdapterVIEw.OnItemClickListener;

  public class MainActivity extends Activity {

  private ListView listView; //文件目錄ListVIEw

  private GridVIEw toolbarGrid; //工具條

  private TextVIEw title; //標題-路徑

  private List fileName=null; //文件名稱

  private List fileNum=null; //記錄文件大少或者有多少個子目錄

  private List filePath=null; //文件路徑

  private List isFile=null; //是否文件夾

  private boolean flag = true;

  private String sdCardPath; //SD卡根路徑

  private String parentPath; //路徑的上級

  /** 底部菜單圖片 **/

  int[] menu_toolbar_image_array = {

  接上頁

  R.drawable.menu_paste,

  R.drawable.controlbar_back,

  R.drawable.menu_penselectmodel,

  R.drawable.menu_quit };

  /** 底部菜單文字 **/

  String[] menu_toolbar_name_array = { "主目錄", "返回", "確定", "退出" };

  public void toast(String msg){

  Toast.makeText(this, msg, 1).show();

  }

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentVIEw(R.layout.main);

  if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

  toast("Sd卡不存在");

  }

  sdCardPath=Environment.getExternalStorageDirectory().getPath();

  // File fff=new File(sdCardPath+"/test/ddd");

  // if(!fff.exists())fff.mkdirs();

  listView=(ListView) findViewById(R.id.list_vIEw);

  title=(TextView) findVIEwById(R.id.title2);

  getFileDir(sdCardPath);

  // 創建底部菜單 Toolbar

  toolbarGrid = (GridView) findViewById(R.id.filedir_toolbar); //獲取底部的GridVIEw控件

  toolbarGrid.setNumColumns(4); // 設置每行列數

  toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,menu_toolbar_image_array));// 設置菜單Adapter。調用getMenuAdapter方法構造MAP參數

  /** 監聽底部菜單選項 **/

  toolbarGrid.setOnItemClickListener(new OnItemClickListener() {

  public void onItemClick(AdapterView arg0, VIEw arg1, int arg2,long arg3) {

  switch (arg2) {

  case 0: //首頁

  getFileDir(sdCardPath);

  break;

  case 1: //返回

  getFileDir(parentPath);

  title.setText("路徑:"+parentPath);

  break;

  case 2:

  // TODO Auto-generated method stub

  break;

  case 3:

  MainActivity.this.finish();

  break;

  }

  }

  接上頁

  });

  }

  /**

  * 構造菜單Adapter

  * @param menuNameArray 名稱

  * @param imageResourceArray 圖片

  * @return SimpleAdapter

  */

  private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {

  ArrayList> data = new ArrayList>();

  for (int i = 0; i < menuNameArray.length; i++) {

  HashMap map = new HashMap();

  map.put("itemImage", imageResourceArray[i]);

  map.put("itemText", menuNameArray[i]);

  data.add(map);

  }

  SimpleAdapter simperAdapter = new SimpleAdapter(

  this, //上下文

  data, //數據源

  R.layout.item_menu, //綁定的視圖

  new String[] { "itemImage", "itemText" }, //綁定數據源對應的標題

  new int[] { R.id.item_image, R.id.item_text }); //綁定視圖對應的控件

  return simperAdapter;

  }

  /**

  * 獲取路徑的子目錄列表

  * @param path 路徑

  */

  private void getFileDir(String path) {

  File f = new File(path); //建立文件

  if(!path.equals(sdCardPath)){ //判斷文件是否SD卡根路徑

  parentPath = f.getParent(); //如果不是根路徑就獲取該路徑的上級路徑

  }else

  parentPath = sdCardPath; //如果是根路徑就

  //初始化存放個數據的List

  fileName = new ArrayList();

  fileNum = new ArrayList();

  filePath = new ArrayList();

  isFile = new ArrayList();

  File file=new File(path); //獲取接收進來的路徑

  int fileSize = file.list().length; //獲取路徑一共有多少個子文件

  //第一次遍歷存放文件夾

  for(int i=0;i< p>

  File fileChild=new File(path, file.list()[i]); //定義子文件

  if(fileChild.isDirectory() && !fileChild.isHidden()){ //判斷子文件是否文件夾並且不是隱藏文件

  fileName.add(fileChild.getName()); //獲取子文件的名稱

  接上頁

  fileNum.add(String.valueOf(fileChild.list().length)+"個子文件"); //獲取子文件裡面有幾個子文件

  filePath.add(fileChild.getPath()); //獲取子文件的路徑

  isFile.add(true); //標記是否文件夾

  }

  }

  //第2次遍歷放圖片文件

  for(int i=0;i< p>

  File fileChild=new File(path, file.list()[i]);

  if(fileChild.getName().endsWith(".jpg")){ //判斷後綴是圖片

  fileName.add(fileChild.getName());

  fileNum.add(String.valueOf(formatSize(fileChild.length()))); //格式化圖片大少,顯示KB/MB/GB

  filePath.add(file.getPath());

  isFile.add(false);

  }

  }

  String[] str={"fileImage","fileName","isFileImage","fileNum","filePath"};

  List> list =new ArrayList>();

  for(int i=0;i< p>

  Map map =new HashMap();

  map.put("fileName", fileName.get(i));

  map.put("filePath", filePath.get(i));

  map.put("fileNum", fileNum.get(i));

  //判斷是文件夾還是圖片,顯示不同的圖片

  if(isFile.get(i)){

  map.put("fileImage", R.drawable.image_folder);

  map.put("isFileImage", R.drawable.list_icon);

  }else if(fileName.get(i).endsWith(".jpg")){

  map.put("fileImage", R.drawable.imagefile);

  map.put("isFileImage", R.drawable.list_icon);

  }

  list.add(map);

  }

  SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,

  list,

  R.layout.filedir_item,

  str,

  new int[]{R.id.item_image,R.id.item_name,R.id.item_icon,R.id.item_num});

  listVIEw.setAdapter(adapter);

  listVIEw.setOnItemClickListener(new OnItemClickListener() {

  @Override

  public void onItemClick(AdapterView parent, View vIEw,int position, long id) {

  Map map=(Map) parent.getItemAtPosition(position); // 獲取點擊的Item所綁定的數據

  接上頁

  getFileDir(map.get("filePath").toString()); //獲取點擊文件夾路徑

  title.setText("路徑:"+map.get("filePath").toString()); //設置標題文字

  }

  });

  }

  /**

  * 格式化文件大少,顯示KB/MB/GB

  * @param size

  * @return 返回格式化的字符串

  */

  private String formatSize(long size) {

  long SIZE_KB = 1024;

  long SIZE_MB = SIZE_KB * 1024;

  long SIZE_GB = SIZE_MB * 1024;

  if(size < SIZE_KB) {

  return String.format( "%d B" , (int) size);

  } else if(size < SIZE_MB) {

  return String.format( "%.2f KB" , (float)size / SIZE_KB);

  } else if(size < SIZE_GB) {

  return String.format( "%.2f MB" , (float)size / SIZE_MB);

  } else {

  return String.format( "%.2f GB" , (float)size / SIZE_GB);

  }

  }

  // @Override

  // public boolean onKeyDown(int keyCode, KeyEvent event) {

  // if(keyCode==KeyEvent.KEYCODE_BACK){

  // if(parentPath!=null)

  // getFileDir(parentPath);

  // return true;

  // }

  //

  //

  // return super.onKeyDown(keyCode, event);

  // }

  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved