大家都应该用过操作系统中的文件搜索功能吧!它可以快速协助我们找到想要的文件。如果要在手机制作一个文件搜索的功能,又该如何实现呢?其实这个功能并不困难,Java I/O的API中提供了java.io.File对象,只要利用File对象的方法,再搭配Android的EditText、TextView等对象,就可以轻松做出一个手机的文件搜索引擎。

本范例中使用EditText、Button与TextView三种对象来实现此功能,用户将要搜索的文件名称或关键字输入EditText中,单击Button后,程序会在根目录中寻找符合的文件,并将搜索结果显示于TextView中;如果找不到符合的文件,则显示“找不到文件”。



范例程序


src/irdc.ex04_11/EX04_11.java

范例中以java.io.File对象来取得根目录下的文件,经过比较后,将符合结果的文件路径写入TextView中,若要在TextView中换行,需使用/n来作换行符号。

 

/* import程序略 */
 
public class EX04_11 extends Activity
{
  /*声明对象变量*/
  private Button mButton;
  private EditText mKeyword;
  private TextView mResult;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    /*加载main.xml Layout */
    setContentView(R.layout.main);
    
    /* 初始化对象 */
    mKeyword=(EditText)findViewById(R.id.mKeyword);
    mButton=(Button)findViewById(R.id.mButton);
    mResult=(TextView) findViewById(R.id.mResult);
    
    /* 将mButton添加onClickListener */
    mButton.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {
      /*取得输入的关键字*/
        String keyword = mKeyword.getText().toString();
        if(keyword.equals(""))
        {
          mResult.setText("请勿输入空白的关键字!!");
        }
        else
        {
          mResult.setText(searchFile(keyword));
        }
      }
    });
  }
  
  /* 搜索文件的method */
  private String searchFile(String keyword)
  {
    String result="";
    File[] files=new File("/").listFiles();
    for( File f : files )
    {
      if(f.getName().indexOf(keyword)>=0)
      {
        result+=f.getPath()+"/n";
      }
    }
    if(result.equals("")) result="找不到文件!!";
    return result;
  }
}

扩展学习


在本范例中,searchFile(String keyword)这个方法的功能为搜索根目录下符合关键字的文件。在搜索文件的过程中,只搜索根目录中的文件,并没有进一步再对子目录下的文件比对,如果要再强化这个文件搜索的功能,让它也能搜索包含子目录下的所有文件,可以在程序中利用File.isDirectory()这个方法来判断其是否为目录。如果是的话,就继续往下一层寻找;不是的话,就终止向下寻找的动作。这个做法在后面的范例中会有详细的示范,要注意的是手机硬件环境是否能负荷程序做大规模的文件搜索,毕竟手机的硬件配备(处理器、内存)是比不上一般计算机的。

另外,在范例中仅针对关键字做了空白检查,在比较文件名称时也没有忽略大小写(要大小写完全符合才搜索的出来),如果要让这个搜索功能更完备,当然可以多做一点变化。例如,检查关键字是否包含特殊的字符、可选择比较文件时是否忽略大小写、可选择要搜索的文件类型,甚至是可自己指定要搜索的目录等,就看各位要如何运用了。