Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android文件系统中文本文件的深度搜索_Android_Search_Filesystems_Sys - Fatal编程技术网

android文件系统中文本文件的深度搜索

android文件系统中文本文件的深度搜索,android,search,filesystems,sys,Android,Search,Filesystems,Sys,我想在Android文件系统中搜索包含特定信息的文本文件(例如,设备的电池电流和电压) 我尝试使用Astro文件浏览器,但它的搜索功能似乎不支持深度搜索(也在子目录中搜索) 我还尝试使用ADB将我要搜索的目录(sys/目录)复制到我电脑的硬盘上,但不幸的是,由于缺少读取权限,大多数文件都没有被复制,因此无法正常工作 您是否没有任何有效的解决方案来浏览文件系统(从PC或Android应用程序)?每个制造商将文件放在不同的位置(或至少可以)。尝试使用API访问以下信息: 有一个意图, 班级呢 至于浏

我想在Android文件系统中搜索包含特定信息的文本文件(例如,设备的电池电流和电压)

我尝试使用Astro文件浏览器,但它的搜索功能似乎不支持深度搜索(也在子目录中搜索)

我还尝试使用ADB将我要搜索的目录(sys/目录)复制到我电脑的硬盘上,但不幸的是,由于缺少读取权限,大多数文件都没有被复制,因此无法正常工作


您是否没有任何有效的解决方案来浏览文件系统(从PC或Android应用程序)?

每个制造商将文件放在不同的位置(或至少可以)。尝试使用API访问以下信息:

有一个意图,

班级呢


至于浏览文件系统,Astro工作正常-但是如果操作系统不授予您权限,您将无法阅读它,除非您在手机上建立根目录。

我现在实现了一个简单、愚蠢的Java方法,可以从Eclipse ADT执行以在文件系统中搜索,它可以工作(但是速度很慢):

publicstaticlist getFilesOfDirectory(File dir,stringfilenamepart){
列出结果;
if(dir.exists()&&dir.isDirectory()
&&!dir.getAbsolutePath()包含(“根”)
&&dir.getAbsolutePath().split(“/”)。长度<10){
Log.i(“文件搜索”,“在目录中搜索”+dir.getAbsolutePath());
File[]files=dir.listFiles();
如果(文件!=null)
结果=新的ArrayList(Arrays.asList(files));
其他的
结果=新的ArrayList();
}
其他的
结果=Collections.emptyList();
/*筛选感兴趣的文件*/
List filteredResult=new ArrayList();
对于(文件:结果){
if(file.getAbsolutePath().toLowerCase()文件)
.contains(fileNamePart.toLowerCase())
filteredResult.add(文件);
//没有别的了。
}
/*递归搜索*/
列表结果=新的ArrayList();
对于(文件:结果){
if(file.isDirectory())
addAll(getFilesOfDirectory(file,fileNamePart));
//没有别的了。
}
//结束。
filteredResult.addAll(进一步结果);
返回filteredResult;
}

可以使用表示要搜索的根目录的文件对象(例如,新文件(“/”)和表示要查找的文件名的字符串(例如,“电压”)来调用该方法。

您看过eclipse->ddms->device->file explorer了吗?Astro发现它适合我,/sys/class/battery/。当然,我找到了/sys/class/battery/,对于Asus TF101,此目录中没有当前信息,只有电压信息。因此,我想检查它是否在文件系统中的其他地方,而不必手动查看每个目录;)你可以试试“aGrep”:


或“DroidGrep”:
是的,我试过这个。不幸的是,API没有提供电流(ameprage)信息,只有电压可用。然而,对于功耗,我也需要电流。你到底想计算什么?如果你的问题更清楚的话可能会有所帮助——因为现在它只询问如何搜索你的Android文件系统。你是对的,对不起。我想写一个小的评测应用程序,可以用瓦特来评测Android设备的能耗。因此,我需要电压和电流的消耗值。然而,Android API本身只支持访问电池电压。你有这个文件吗?它似乎为其他人解决了这个问题/系统/等级/电源/电池/电流目前没有,不幸的是没有。我想,这是一个不好的迹象?最好使用
FileNameFilter
…这段代码容易出现Stackoverflow.Oops。我还没有找到文件名过滤器。谢谢你的评论。
public static List<File> getFilesOfDirectory(File dir, String fileNamePart) {

    List<File> result;

    if (dir.exists() && dir.isDirectory()
            && !dir.getAbsolutePath().contains("root")
            && dir.getAbsolutePath().split("/").length < 10) {
        Log.i("fileSearch", "search in directory " + dir.getAbsolutePath());
        File[] files = dir.listFiles();

        if (files != null)
            result = new ArrayList<File>(Arrays.asList(files));
        else
            result = new ArrayList<File>();
    }

    else
        result = Collections.emptyList();

    /* Filter for interesting files. */
    List<File> filteredResult = new ArrayList<File>();
    for (File file : result) {
        if (file.getAbsolutePath().toLowerCase()
                .contains(fileNamePart.toLowerCase()))
            filteredResult.add(file);
        // no else.
    }

    /* Search recursively. */
    List<File> furtherResults = new ArrayList<File>();
    for (File file : result) {
        if (file.isDirectory())
            furtherResults.addAll(getFilesOfDirectory(file, fileNamePart));
        // no else.
    }
    // end for.

    filteredResult.addAll(furtherResults);

    return filteredResult;
}