作者: 梁晓禄
文件搜索功能在操作系统或网页中会经常遇到,他可以快速帮用户找到想要的文件或资料。同样在手机中也能实现文件搜索功能。在android中可以通过Java I/O API中的java.io.File对象,利用File对象方法,再搭配android的EditText、TextView等对象,就可以轻松做出一个手机文件搜索引擎。
下面以一个实例来详细讲解。
编写布局文件main.xml,分别添加两个TextView控件,1个EditText控件和1个Button控件,实现整体布局,具体代码如下。
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/white"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditText
android:id="@+id/mKeyword"
android:layout_width="198px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="110px"
android:layout_y="12px"
>
</EditText>
<TextView
android:id="@+id/mText"
android:layout_width="wrap_content"
android:layout_height="31px"
android:textSize="18sp"
android:layout_x="7px"
android:layout_y="25px"
android:text="@string/str_title"
android:textColor="@drawable/black"
>
</TextView>
<Button
android:id="@+id/mButton"
android:layout_width="86px"
android:layout_height="48px"
android:text="@string/str_button"
android:layout_x="100px"
android:layout_y="72px"
>
</Button>
<TextView
android:id="@+id/mResult"
android:layout_width="296px"
android:layout_height="283px"
android:layout_x="10px"
android:layout_y="132px"
android:textColor="@drawable/blue"
>
</TextView>
</AbsoluteLayout>
在strings.xml添加程序中要使用的字符串。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">HI</string>
<string name="app_name">搜索</string>
<string name="str_button">请搜索</string>
<string name="str_title">关键字:</string>
</resources>
编写sousuo.java,实现搜索功能。
1声明对象变量。
2载入main.xmlLayout.
3初始化对象,并为mButton按钮设置响应单击事件onClickListener。
4取得输入的关键字。
5根据搜索文件的方法和关键字搜索。
package irdc.sousuo;
import irdc.sousuo.R;
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class sousuo 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()这个方法来判断其是否为目录。如果是的话,就继续往下一层寻找;不是的话,就终止向下寻找的动作。
运行结果如下: