首先在eclipse里面建立Android工程
1.启动Eclipse
2.右击“package explorer”并点击 “ New->Android Project ”
3.在新建工程的对话框中填写以下信息

  • 工程名: FSExplorer1
  • 包名: org.lombardos.android.FSExplorer1
  • Activity Name: FileList
  • Application Name: Filesystem Explorer

4.点击“ Finish”完成新建工程的对话框。

显示根文件系统

下一步是去修改FileList文件使根目录下的文件和目录可以显示出来。这一步类似我们在记事本中显示内容,不同之处就在于这里不是从SQL数据库数据库中显示数据而是直接获取的Android系统文件。

  1. 增加一个字符变量”no_files”到”res/values/strings.xml”文件中。这个变量的值是”This directory is empty”,当没有文件或者子目录在当前目录下这个值就会显示出来。
  2. 创建一个新的布局文件命名为directory_list.xml。此文件的内容如下。注意他的格式必须符合google官方给出的规范(参考 first exercise 的第四步)。<?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”> <ListView id=”@id/android:list”
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”/>
    <TextView id=”@id/android:empty”
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”@string/no_files”/>
    </LinearLayout>
  3. 创建另外一个布局文件file_row.xml。文件的内容如下。文件的格式规范参考( first exercise 第五步)。
    <?xml version=”1.0″ encoding=”utf-8″?>
    <TextView id=”@+id/text1″
    xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”/>
    这个布局文件用来显示目录下的每一个子目录和文件的列表。
  4. 修改函数文件FileList.java 中的onCreate() 如下:
    public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.directory_list);
    fill(new File(”/”).listFiles());
    }
    我们修改setContentView()的第一个参数为“R.layout.directory_list”,以便类似”Mp3s”这样的列表界面显示而取代原来”main”参数的主界面的显示。另外我们需要增加一个方法fill(),这个方法在后面介绍。
  5. 改变类FileList的扩展基类,由原来的”Activity”改为”ListActivity”,如下:
    public class FileList extends ListActivity {
  6. 为类”FileList”创建一个私有变量用来显示当前目录下的列表条目。
    private List<String> items = null;
  7. 内部方法fill()的参数是File[]数组,用于在屏幕的列表中显示每个文件和目录的名字。
    1 private void fill(File[] files) {
    2 items = new ArrayList<String>();
    3 for( File file : files )
    4 items.add(file.getPath());
    5 ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.file_row, items);
    6 setListAdapter(fileList);
    7 }
  8. 1.行2-4行获取files[]数组并将每一个文件名赋予ArrayList<String>,items是一个类在后面将会用到,当用户点击每一个文件或者目录的时候。
    2.第五行就是使用布局文件file_row layout将ArrayList中的数据输出到ArrayAdapter。
    3. 最后第六步,将目前ArrayAdapter中的内容显示到屏幕上。

  9. 对于使用的一些imports类在eclipse下快捷键”Shift-Control-O”来组织。
  10. 保存你的文件并运行。这样就可以在Android电话中得到你的手机系统文件目录了。
  11. 当再点击却没有发生任何反应,下面的部分将解决这个问题。


导航目录树

现在我们可以看到了根目录root中的目录结构,那么是否可以显示每个子目录中的结构。

  1. 首先是我们需要一个返回的导航到目录树的根部即root,否则我们会发现进入目录后无法返回。最快的解决 方案就是在每个目录下都安排一个返回根目录的导航。实施起来第一步就是增加一个string变量在strings.xml文件中,他的name必须是 ”to_top”,而值可以是”[Back to Top]“。
  2. 下一步就是需要增加这个”to_top”到fill()函数的item列表中。在代码 “items = new ArrayList<String>(); “行后面增加items.add(getString(R.string.to_top));

    注意:类当中的静态变量的调用采用getString(R.string.<name>) 方法是比较合适的。将这些静态变量移到资源目录下可以规范你的代码。

  3. 当用户点击列表条目时候,我们就有机会截取点击并且做点有趣的事情了。为了达到这个目的,我们需要覆写ListActivity类的onListItemClick()方法。如下:

    1 @Override
    2 protected void onListItemClick(ListView l, View v, int position, long id) {
    3 int selectionRowID = (int)getSelectionRowID();
    4 if (selectionRowID==0){
    5 fillWithRoot();
    6 } else {
    7 File file = new File(items.get(selectionRowID));
    8 if (file.isDirectory())
    9 fill(file.listFiles());
    10 else
    11 AlertDialog.show(this, “Not a Directory”, “That’s a file, not a directory”, “Cancel”, false);
    12 }
    13 }
    Notes:

    • 第三行显示用户点击的列表行号。
    • 第五行,如果用户选择的RowID为0,则返回到根目录列表。
    • 第九行,表示进入到用户选择的目录列表。
    • 第十一行,显示一些错误信息。
  4. 现在我们需要创建 fillWithRoot() 方法。作用类似onCreate()方法的最后一行:

    private void fillWithRoot() {
    fill(new File(”/”).listFiles());
    }

  5. 不要忘记使用fillWithRoot()方法替换onCteate()方法中的fill()方法

    这个项目完整的源代码可以从这里下载获得, 下载 (32K Zip archive)

更多相关文章

  1. android布局文件中的include
  2. 整理android环境离线安装搭建方法——支持android 2.3.3和androi
  3. Android上传文件到Web服务器,PHP接收文件(二)
  4. Android电话拨号器实现方法
  5. 新建android工程 没有R.java文件

随机推荐

  1. Android记事本NotePad应用功能拓展(四)
  2. 获取Android(安卓)SDK 源代码并在Eclipse
  3. android TabHost导航切换实现方式
  4. android 兼容所有刘海屏的方案大全
  5. android:maxHeight,android:maxWidth失效
  6. Android(安卓)ListView 去除边缘阴影、选
  7. Android(安卓)UI Design
  8. 【读书笔记-《Android游戏编程之从零开始
  9. Android(安卓)系统UI设计规则
  10. android:gravity 和 android:layout_Grav