从sys目录中读取文件

时间:2013-05-28 12:12:54

标签: android

他是我的代码:

File f;
    FileInputStream inputStream;
    byte[] buffer = null;
    try {
        f=new File("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");
        if(f.exists()){
        inputStream =  new FileInputStream(f);
        inputStream.read(buffer);
        }


         Log.i("informacja","Czytam");
    } catch (Exception e) {
        // TODO Auto-generated catch block

        Log.i("informacja",e.toString());
    } 

文件路径正确,文件存在。但总是在inputStream.read(buffer)中我得到NullPointerException。 这是我的清单的一部分:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

任何人都可以建议我在哪里犯了错误吗?

@Update。感谢您的代码段。现在我可以阅读但是: 这就是我得到的:[B @ 41a743c8 我应该得到什么:1000000

3 个答案:

答案 0 :(得分:2)

我能够阅读猫的输出

    ProcessBuilder cmd;
    String result = "";

    try {
        String[] args = { "/system/bin/cat", "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" };
        cmd = new ProcessBuilder(args);

        Process process = cmd.start();
        InputStream in = process.getInputStream();
        byte[] re = new byte[32768];
        int read = 0;
        while ( (read = in.read(re, 0, 32768)) != -1) {
            String string = new String(re, 0, read);
            Log.e(getClass().getSimpleName(), string);
            result += string;
        }
        in.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return result;

并将其作为普通文件打开

    String result = "";

    try {

        File file = new File("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");
        InputStream in = new FileInputStream(file);
        byte[] re = new byte[32768];
        int read = 0;
        while ( (read = in.read(re, 0, 32768)) != -1) {
            String string = new String(re, 0, read);
            Log.e(getClass().getSimpleName(), string);
            result += string;
        }
        in.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return result;

答案 1 :(得分:1)

Android应用程序不会在未经修改的设备上以root身份运行,因此您无法在不设备设备的情况下从/sys文件夹中读取。

答案 2 :(得分:1)

问题出在这里 - &gt; byte[] buffer = null;inputStream.read(buffer);

缓冲区仍然为空,请尝试以下方法:

    InputStream is = new FileInputStream(f);
    byte[] b = new byte[is.available()];
    is.read(b);

希望这有帮助,祝你好运^^

P.S。不要忘记设置所有必要的权限

修改

要读取文件,您需要解析它。 字符串内容的字符串结果可以通过以下方式获得:String fileContent = new String(b); //the byte we read earlier

从那里,您必须解析文件以获得所需的值。为了解析文件,您必须知道文件结构并根据需要创建解析方法。