java - Pipe ("|")和 grep 在 Android 中的 ProcessBuilder 中不起作用

标签 java android processbuilder

我想获取 Android 上的总 RAM:

       private String getTotalRAM() 
       {
         ProcessBuilder cmd;
         String result="";

         try{
          String[] args = {"/system/bin/sh", "-c", "cat -n /proc/meminfo | grep MemTotal"};
          cmd = new ProcessBuilder(args);

          Process process = cmd.start();
          InputStream in = process.getInputStream();
          byte[] re = new byte[1024];
          while(in.read(re) != -1){
            System.out.println(new String(re));
            result = result + new String(re);
          }
          in.close();
          } catch(IOException ex){
            ex.printStackTrace();
          }
         return result;
        } 

如果没有 grep MemTotal,cat 会返回有关内存的完整信息。当我只想用 grep 得到一行时,我什么也得不到。我怎样才能解决这个问题?我现在只想获取总可用 RAM。

最佳答案

各种重定向( |>< 、...)均由 shell 处理。如果您不调用 shell,则无法使用它们。

一个干净的解决方案是阅读 /proc/meminfo在您的 Java 代码中简单搜索字符串 MemTotal手动。该代码不会比您现在正在做的代码长很多,并且需要的资源也会少得多。

关于java - Pipe ("|")和 grep 在 Android 中的 ProcessBuilder 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789266/

相关文章:

java - ambari中namenode启动失败

Java ProcessBuilder 无法启动 GNU screen

java - 使用流程构建器

java - Hibernate Criteria 查询在生成的 SQL 中以错误的顺序列出表

java - Spring Boot - JPA - Postgres 错误 : cross-database references are not implemented:

java - 为什么 List<Long>.get(0) 返回 double 值?

javascript - Titanium Appcelerator - 多屏应用

java - 从java代码执行命令

java - 访问其他类中对象的最有效做法: Java

java - 我无法导入 com.itextpdf.text.Document 类