如何用某个关键字搜索SD卡中的文件?

时间:2014-04-04 06:05:59

标签: android

我正在创建一个应用程序,在excel表格中创建数据备份,文件名后跟当前日期,如" myfile_01-01-2014"和" myfile_01-15-2014"等等...你可以看到日期是可变的。我想搜索关键字" myfile _"这样我就可以根据创建的日期获取文件列表。我想使用最新的文件进行恢复。

(Is it possieble)? "How" : "tell me any other way to do this";
谢谢......

3 个答案:

答案 0 :(得分:4)

要使用字符串关键字搜索文件,请使用以下函数

public ArrayList<File> searchFile(File parent,final String searchKeyWord) {
    ArrayList<File> result = new ArrayList<File>();
    File[] files = parent.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String filename) {
            return filename.contains(searchKeyWord);
        }
    });
    for (File file : files) {
        result.add(file);
    }
    return result;
}

如需更多过滤选项,请使用startsWith endWith等字符串操作更改以下行。

 return filename.contains(searchKeyWord);

答案 1 :(得分:1)

您可以使用递归搜索。将此功能与您要开始搜索文件的目录路径一起使用(例如&#34; / mnt / sdcard&#34;)。

public Vector<String> yourFiles = new Vector<String>();

private void searchInDirectory(String directory)
{
File dir = new File(directory);

if(dir.canRead() && dir.exists() && dir.isDirectory())
{
    String []filesInDirectory = dir.list();
    if(filesInDirectory != null)
    {
        for(int i=0; i<filesInDirectory.length; i++)
        {

            File file = new File(directory+"/"+filesInDirectory[i]);                    

            if(file.isFile() && filesInDirectory[i].startsWith("myfile"))
            {
                yourFiles.add(directory+"/"+filesInDirectory[i]);
            }
            else if(file.isDirectory() )
            {
                searchInDirectory(file.getAbsolutePath());
            }

        }
    }
}
}

答案 2 :(得分:1)

试试这个家伙

将此方法称为

getAllDocument(Environment.getExternalStorageDirectory());

和方法差异是......

public void getAllDocument(File dir) {
            File listFile[] = dir.listFiles();

            if (listFile != null) {
                for (int i = 0; i < listFile.length; i++) {

                    if (listFile[i].isDirectory()) {
                        getAllDocument(listFile[i]);
                    } else {


                            listFile[i].getName();
                            if(!listFile[i].getAbsolutePath().startsWith("myfile_"))
                            { 

                                //took this file into your wraaper or then just comapre for the newest with your logic
                            }
                        }
                    }
                }
            }