本实例实现的是浏览根目录下所有的文件,包含子目录下所有的文件,类似于实现“Windows资源管理器”,首先,先看下程序的实现截图:
这个程序应用的是ListActivity和JavaIO的知识。
首先,让我们先看下主程序的布局文件定义:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/mPath" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:textSize="18sp" android:textColor="@drawable/blue" /> <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <TextView android:id="@+id/text1" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" />
public class EX04_21 extends ListActivity { /* 对象声明 items:存放显示的名称 paths:存放文件路径 rootPath:起始目录 */ private List<String> items=null; private List<String> paths=null; private String rootPath="/"; private TextView mPath; /** Called when the activity is first created. */ @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); /* 加载main.xml Layout */ setContentView(R.layout.main); mPath=(TextView)findViewById(R.id.mPath); getFileDir(rootPath); } /* 取得文件架构的method */ private void getFileDir(String filePath) { /* 设定目前所在路径 */ mPath.setText(filePath); items=new ArrayList<String>(); paths=new ArrayList<String>(); File f=new File(filePath); File[] files=f.listFiles(); if(!filePath.equals(rootPath)) { /* 第一笔设定为[回到根目录] */ items.add("Back to "+rootPath); paths.add(rootPath); /* 第二笔设定为[回上层] */ items.add("Back to ../"); paths.add(f.getParent()); } /* 将所有文件加入ArrayList中 */ for(int i=0;i<files.length;i++) { File file=files[i]; items.add(file.getName()); paths.add(file.getPath()); } /* 声明一ArrayAdapter,使用file_row这个Layout, 并将Adapter设定给此ListActivity */ ArrayAdapter<String> fileList = new ArrayAdapter<String>(this,R.layout.file_row, items); setListAdapter(fileList); } /* 设定ListItem被按下时要做的动作 */ @Override protected void onListItemClick(ListView l,View v,int position,long id) { File file = new File(paths.get(position)); if(file.canRead()) { if (file.isDirectory()) { /* 如果是文件夹就再进去读取 */ getFileDir(paths.get(position)); } else { /* 如果是文件,则弹出AlertDialog */ new AlertDialog.Builder(this) .setTitle("Message") .setMessage("["+file.getName()+"] is File!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { } }).show(); } } else { /* 弹出AlertDialog显示权限不足 */ new AlertDialog.Builder(this) .setTitle("Message") .setMessage("权限不足!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { } }).show(); } } }