Aji*_*ith 3 java macos system-information
从JAVA代码执行系统命令时,我遇到了一个奇怪的问题.
其实我想Mac OSX
从我的JAVA App 获取系统信息.
为此我正在使用
Runtime.getRuntime().exec("system_profiler -detailLevel full");
这工作正常.如果我打印输出,它很酷.但我想将此信息写入plist
文件以供将来使用.对于即时通讯使用system_profiler
.like 的-xml参数,
String cmd = "system_profiler -detailLevel full -xml > "+System.getProperty( "user.home" )+"/sysinfo.plist";
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
基本上这应该在当前用户主目录中创建一个plist文件.
但这似乎没有写任何文件.
我错过了什么吗?
我的Java不仅仅是生锈的,所以请保持温和.;-)
Runtime.exec()
不自动使用shell来执行您传递的命令,因此IO重定向没有做任何事情.
如果您只是使用:
"/bin/sh -c system_profiler -detailLevel full > path/file.plist"
Run Code Online (Sandbox Code Playgroud)
然后该字符串将被标记为:
{ "/bin/sh", "-c", "system_profiler", "-detailLevel", "full", ">", "path/file.plist" }
Run Code Online (Sandbox Code Playgroud)
哪个也行不通,因为-c
只需要一个参数.
试试这个:
String[] cmd = { "/bin/sh", "-c", "system_profiler -detailLevel full > path/file.plist" };
Process p = Runtime.getRuntime.exec(cmd);
Run Code Online (Sandbox Code Playgroud)
当然,您也可以Process
使用您的实例输出Process.getInputStream()
并将其写入您想要的文件中; 因此完全跳过shell,IO重定向等.
Christian.K绝对正确.这是一个完整的例子:
public class Hello {
static public void main (String[] args) {
try {
String[] cmds = {
"/bin/sh", "-c", "ls -l *.java | tee tmp.out"};
Process p = Runtime.getRuntime().exec (cmds);
p.waitFor ();
System.out.println ("Done.");
}
catch (Exception e) {
System.out.println ("Err: " + e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您没有使用竖线(|
)或重定向(>
),那么您可以使用String cmd = "ls -l *.java"
,就像在原始命令中一样.
如果您确实希望在Java控制台窗口中看到任何输出,那么您还需要调用Process.getInputStream()
.
这是一个很好的链接: 在Java应用程序中运行系统命令
归档时间: |
|
查看次数: |
11045 次 |
最近记录: |