1

我正在尝试使用 qemu-img 从 Java 代码创建磁盘空间,因此我实例化了进程和运行时类。运行程序时,尽管我使用相同的机制进行类似的执行,但命令没有执行,并且它工作正常。所以我想知道我是否在这里错过了什么。

StringBuilder commandBuilder = new StringBuilder("qemu-img create -f "+chosenStorageType+" ~/"+storageName+".img "+storageSize+"M");
System.out.println(commandBuilder);
String command = commandBuilder.toString();
System.out.println("this is the correct one: "+command);

System.out.println("Creating the image...");
Runtime runtime = Runtime.getRuntime();
Process process = null;
try {
    process = runtime.exec(command);
    System.out.println("from process try..catch");
} catch (IOException e1) {
    e1.printStackTrace();
    System.out.println(e1.getMessage());
}finally{
    System.out.println("from finally entry");
    process.destroy();
}

输出如下:

qemu-img create -f raw ~/testSPACE.img 23.0M

this is the correct one: /qemu-img create -f raw ~/testSPACE.img 23.0M
Creating the image...
from process try..catch
from finally entry

但是,如果我转到该目录,则不会创建该文件。

如果我将输出复制到终端中,只是为了测试它,一切都像魅力一样。

4

1 回答 1

1

这里的波浪号 ( ~)

" ~/"+storageName+".img "

被 shell 解释为你的主目录。我会替换真正的路径。

另请注意,您需要使用进程 stdout/err,并通过收集进程的错误代码(并检查它!)Process.waitFor()

于 2013-03-21T10:05:10.317 回答