歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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