Java程序如何从Mac中弹出USB磁盘

3

我正在尝试从Java程序中弹出Mac上的USB闪存驱动器。我已经尝试了umount和diskutil eject,但都无法正常工作。两者都返回了退出代码1。如果我物理拔出驱动器,Mac OS X会给我标准警告。

我的代码:

log.debug( "going to eject targetRoot.getPath()=" + targetRoot.getPath() );
String command = "diskutil eject " + targetRoot.getPath().replace( " ", "\\ " );
log.debug( "about to run command=" + command );
int exitCode = Runtime.getRuntime().exec( command ).waitFor();
log.debug( "exitCode=" + exitCode );

输出结果:
going to eject targetRoot.getPath()=/Volumes/NO NAME
about to run command=diskutil eject /Volumes/NO\ NAME
exitCode=1

手册表明,您可以使用挂载路径或设备路径作为umount或diskutil eject的参数。

如果我将命令复制到终端并运行,则可以完美地运行。我怀疑这与环境有关,但是如您所见,我没有向exec方法发送envp。

作为程序员,要使弹出/卸载正常工作,该做些什么呢?

谢谢!

1个回答

1

你试过使用 ProcessBuilder 而不是 Runtime.exec() 吗?它可以让你精确指定每个参数,也可以让你构建一个环境。

...或者至少使用 Runtime.exec() 的数组参数形式而不是字符串。

我猜你的空格转义没有起作用 -- Runtime.exec() 的便捷形式使用 StringTokenizer 处理空格,可能不如大多数 shells 聪明。


谢谢,就这样了!我改为使用字符串数组。我还必须删除空格的替换,将其替换为“\ ”。 - bmauter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接