2011-04-26 94 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。代碼不會比現在正在做的更長,並且需要更少的恢復時間。