我想在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只得到一行时,我什么也得不到。我怎样才能解决这个问题?我现在只想获得总可用内存。
答案 0 :(得分:3)
所有类型的重定向(|
,>
,<
,...)都由shell处理。如果你没有调用shell,那么你就不能使用它们。
一个干净的解决方案是在Java代码中读取/proc/meminfo
并手动搜索字符串MemTotal
。代码不会比你现在所做的更长,并且需要更少的重复。
答案 1 :(得分: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();
}