Android SD卡文件浏览器

实现Android SD卡文件浏览器技术分析:

主要用到的控件:ListView
我们要做的就是遍历整个SD卡下的所有文件并把他们显示到这个ListView控件中,如果遍历的是文件夹那么先获取该文件夹的下的所有文件,再把这个所有文件填充到这个ListView里就可以了,如此反复就可以了。

如何获取文件夹或者文件的修改日期?
用java里的File类只为我们提供了一个public long lastModified():表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示;如果该文件不存在,或者发生 I/O 错误,则返回 0L。

?
1
2
3
4
File myFile =  new  File( "D:\\Android开发常用图标" );
long  modTime = myFile.lastModified();
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
System.out.println(dateFormat.format( new Date(modTime)));

实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package  com.jiahui.sdcardfileexplorer;
 
import  java.io.File;
import  java.text.DateFormat;
import  java.text.SimpleDateFormat;
import  java.util.ArrayList;
import  java.util.Date;
import  java.util.HashMap;
import  java.util.List;
import  java.util.Map;
 
import  android.app.Activity;
import  android.os.Bundle;
import  android.view.View;
import  android.widget.AdapterView;
import  android.widget.AdapterView.OnItemClickListener;
import  android.widget.Button;
import  android.widget.ListView;
import  android.widget.SimpleAdapter;
import  android.widget.TextView;
import  android.widget.Toast;
 
public  class  SDCardFileExplorerActivity  extends Activity {
 
     private TextView tvpath;
     private ListView lvFiles;
     private Button btnParent;
 
     // 记录当前的父文件夹
     File currentParent;
 
     // 记录当前路径下的所有文件夹的文件数组
     File[] currentFiles;
 
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
         lvFiles = (ListView) this .findViewById(R.id.files);
 
         tvpath = (TextView) this .findViewById(R.id.tvpath);
         btnParent = (Button) this .findViewById(R.id.btnParent);
 
         // 获取系统的SDCard的目录
         File root = new File( "/mnt/sdcard/" );
         // 如果sd卡存在的话
         if (root.exists()) {
 
             currentParent = root;
             currentFiles = root.listFiles();
             // 使用当前目录下的全部文件、文件夹来填充ListView
             inflateListView(currentFiles);
 
         }
 
         lvFiles.setOnItemClickListener( new OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> adapterView, View view,
                     int position, long  id) {
                 // 如果用户单击了文件,直接返回,不做任何处理
                 if (currentFiles[position].isFile()) {
                     // 也可自定义扩展打开这个文件等
                     return ;
                 }
                 // 获取用户点击的文件夹 下的所有文件
                 File[] tem = currentFiles[position].listFiles();
                 if (tem == null  || tem.length == 0 ) {
 
                     Toast.makeText(SDCardFileExplorerActivity. this ,
                             "当前路径不可访问或者该路径下没有文件" , Toast.LENGTH_LONG).show();
                 } else {
                     // 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
                     currentParent = currentFiles[position];
                     // 保存当前的父文件夹内的全部文件和文件夹
                     currentFiles = tem;
                     // 再次更新ListView
                     inflateListView(currentFiles);
                 }
 
             }
         });
 
         // 获取上一级目录
         btnParent.setOnClickListener( new View.OnClickListener() {
 
             @Override
             public void onClick(View v) {
 
                 try {
 
                     if (!currentParent.getCanonicalPath().equals( "/mnt/sdcard" )) {
 
                         // 获取上一级目录
                         currentParent = currentParent.getParentFile();
                         // 列出当前目录下的所有文件
                         currentFiles = currentParent.listFiles();
                         // 再次更新ListView
                         inflateListView(currentFiles);
                     }
                 } catch (Exception e) {
                     // TODO: handle exception
                 }
 
             }
         });
 
     }
 
     /**
      * 根据文件夹填充ListView
      *
      * @param files
      */
     private void inflateListView(File[] files) {
 
         List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
 
         for ( int i =  0 ; i < files.length; i++) {
 
             Map<String, Object> listItem = new HashMap<String, Object>();
 
             if (files[i].isDirectory()) {
                 // 如果是文件夹就显示的图片为文件夹的图片
                 listItem.put( "icon" , R.drawable.folder);
             } else {
                 listItem.put( "icon" , R.drawable.file);
             }
             // 添加一个文件名称
             listItem.put( "filename" , files[i].getName());
 
             File myFile = new File(files[i].getName());
 
             // 获取文件的最后修改日期
             long modTime = myFile.lastModified();
             SimpleDateFormat dateFormat = new SimpleDateFormat(
                     "yyyy-MM-dd HH:mm:ss" );
             System.out.println(dateFormat.format( new Date(modTime)));
 
             // 添加一个最后修改日期
             listItem.put( "modify" ,
                     "修改日期:" + dateFormat.format( new Date(modTime)));
 
             listItems.add(listItem);
 
         }
 
         // 定义一个SimpleAdapter
         SimpleAdapter adapter = new SimpleAdapter(
                 SDCardFileExplorerActivity. this , listItems, R.layout.list_item,
                 new String[] { "filename" , "icon" , "modify" },  new  int [] {
                         R.id.file_name, R.id.icon, R.id.file_modify });
 
         // 填充数据集
         lvFiles.setAdapter(adapter);
 
         try {
             tvpath.setText( "当前路径为:" + currentParent.getCanonicalPath());
         } catch (Exception e) {
             e.printStackTrace();
         }
 
     }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值