Mac Eject USB Disk из программы Java - PullRequest
       0

Mac Eject USB Disk из программы Java

3 голосов
/ 09 сентября 2011

Я пытаюсь извлечь флэш-накопитель USB на Mac из программы Java.Я попытался umount и diskutil извлечь, и ни один не работает.Я получаю код выхода 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.

Если я скопирую команду в терминал и запущу ее, то она отлично работает.Я подозреваю, что это что-то связанное со средой, но, как вы можете видеть, я не посылаю envp методу exec.

Что должен сделать программист, чтобы заставить работать eject / unmount?

Спасибо!

1 Ответ

1 голос
/ 09 сентября 2011

Вы пытались использовать ProcessBuilder вместо Runtime.exec ()? Он позволяет точно указывать каждый из аргументов, а также позволяет создавать среду.

... или, по крайней мере, используйте форму Runtime.exec () , указывающую массив аргументов, а не строку.

Я предполагаю, что экранирование пробелов не работает - удобная форма Runtime.exec () обрабатывает пробелы с помощью StringTokenizer и, вероятно, не так умна, как большинство оболочек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...