使用Java I-O流快速搜索手机文件引擎
文件搜索功能可以快速协助我们找到想要的文件,在手机上制作一个文件搜索的功能其实并不困难,Java I/O的API中提供了java.io.File对象,只要利用File对象的方法,再搭配Android的EditText、TextView等对象,就可以轻松做出一个手机的文件搜索引擎。
下面是程序源码:
package com.example.test01;
import java.io.File;
import java.util.Iterator;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
Button button01;
EditText editText01;
TextView textView01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button01 = (Button)findViewById(R.id.button01);
editText01 = (EditText)findViewById(R.id.editText01);
textView01 = (TextView)findViewById(R.id.textView01);
button01.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//取得输入的关键字
String string = editText01.getText().toString();
if (string.equals("")) {
textView01.setText("请勿输入空白的关键字!");
}
else
{
textView01.setText(SearchFile(string));
}
}
});
}
//搜索文件的方法
public String SearchFile(String string)
{
String result = "";
File[] file = new File("/").listFiles();
for (File file2 : file) {
if (file2.getName().indexOf(string) >= 0) {
result += file2.getPath() + "\n";
}
}
if (result.equals("")) result = "找不到文件!";
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
运行效果如图:
不好意思,忘了截图了.......
扩展学习:
在本范例中,searchFile(String)方法的功能仅为搜索根目录下符合关键字的文件,并没有进一步再对子目录下的文件进行搜索。如果想实现这个功能,我们可以利用File.isDirectory()这个方法来判断其是否为目录,如果是则继续向下搜索,否则终止向下搜索。所以我们需要运用递归的思想,下面是对searchFile()方法的改进,考虑到手机能否负荷大规模的文件搜索,我们将起始搜索位置定在sdcard中:
//搜索文件的方法,参数分别为关键字,搜索目录,搜索结果
public String SearchFile(String keywords , String filePath , String result)
{
String temp = "";
File[] file;
if (filePath == null) {
file = new File("/sdcard").listFiles();
}
else
{
file = new File(filePath).listFiles();
}
for (File file2 : file) {
if (file2.isDirectory()) {
//不搜索系统文件夹
if (!file2.getName().contains(".")) {
temp += SearchFile(keywords, file2.getAbsolutePath(), result);
}
}
else
{
if (file2.getName().contains(keywords)) {
temp += file2.getPath() + "\n";
}
}
}
if (temp.equals("")) temp = "";
return temp;
}
在调用微博授权接口的时候,提示:errorCode:10015:The redirect_uri does not match the one of registration,这是什么原因?
程序中的授权回调地址redirect_uri要和该应用实际地址保持一致。
在应用基本信息中,应用的网址是: http://www.xxx.com
在代码中 #define REDIRECTURI @"www.xxx.com"
后来加上个http:// 好了。。。
/**
**判断 日期是否是本周
**/
-(BOOL)isCurrentWeek:(NSString *)dateStr{
NSDateFormatter *dateFormatter=[[NSDateFormatteralloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date=[dateFormatter dateFromString:dateStr];
[dateFormatter release];
NSDate *start;
NSTimeInterval extends;
NSCalendar *cal=[NSCalendarautoupdatingCurrentCalendar];
[cal setFirstWeekday:2];//一周的第一天设置为周一
NSDate *today=[NSDatedate];
BOOL success= [calrangeOfUnit:NSWeekCalendarUnit startDate:&start interval: &extends forDate:today];
if(!success)
return NO;
NSTimeInterval dateInSecs = [date timeIntervalSinceReferenceDate];
NSTimeInterval dayStartInSecs= [starttimeIntervalSinceReferenceDate];
if(dateInSecs >= dayStartInSecs && dateInSecs < (dayStartInSecs+extends)){
return YES;
}
else {
return NO;
}
}
/***
***根据日期计算周几
****/
-(NSString *)weekDayWithDate:(NSString *)date{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *fromdate=[dateFormatter dateFromString:date];
NSCalendar *gregorian = [NSCalendar currentCalendar];
NSDateComponents *weekDayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:fromdate];
NSInteger mDay = [weekDayComponents weekday];
[dateFormatter release];
NSString *week=@"";
switch (mDay) {
case 0:{
week=@"日";
break;
}
case 1:{
week=@"日";
break;
}
case 2:{
week=@"一";
break;
}
case 3:{
week=@"二";
break;
}
case 4:{
week=@"三";
break;
}
case 5:{
week=@"四";
break;
}
case 6:{
week=@"五";
break;
}
case 7:{
week=@"六";
break;
}
default:{
break;
}
};
return week;
}