2011-04-26 42 views
0

在工作的ProcessBuilder我想在Android上总RAM:管道(“|”)和grep不会在Android中

 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,猫返回我关于内存的整体信息。当我想用grep得到一行时,我什么都没有。我怎样才能解决这个问题?我现在只想获得可用的RAM。

回答

2

由于@Joachim建议你可能会发现这个作品适合你。

BufferedReader pmi = new BufferedReader(new FileReader("/proc/meminfo")); 
try { 
    String line; 
    while ((line = pmi.readLine()) != null) 
    if (line.contains("MemTotal")) 
     // get the second word as a long. 
     return Long.parseLong(line.split(" +",3)[1]); 
    return -1; 
} finally { 
    pmi.close(); 
} 
3

各种重定向(|,>,<,...)由shell处理。如果你不调用shell,那么你不能使用这些。

干净的解决方案是在Java代码中读取/proc/meminfo,然后手动简单搜索字符串MemTotal。代码不会比现在正在做的更长,并且需要更少的恢复时间。