Невозможно скрыть папку с помощью java Runtime.getRuntime().exec()

#java #runtime.exec

#java #runtime.exec

Вопрос:

 if(!dataFolder.isHidden())
          if(System.getProperty("os.name").toLowerCase()
                              .indexOf("windows") > -1){
             String command = "attrib  h -r -s "   dataFolder.getAbsolutePath();
             Runtime.getRuntime().exec(command);
             System.out.println(command);
          }
  

Я запускаю приведенный выше код, и я никак не могу заставить его работать. Я хочу сделать папку «.data» скрытой, не доступной только для чтения, а не системной папкой, но она создается видимой и доступной только для чтения.

Это вывод строки System.out.println:

 attrib  h -r -s D:eclipsebin.data
  

Я также не могу использовать метод exitValue() процесса, потому что он всегда жалуется на:

 java.lang.IllegalThreadStateException: process has not exited
  

Что я делаю не так?

Ответ №1:

Сначала вы должны вызвать Process.waitFor() метод. Этот метод будет блокироваться до завершения attrib процесса. У процесса не будет кода выхода, пока он не завершится.

Комментарии:

1. Спасибо, используя это, я получил результат от exitValue (который равен 0), но я все еще не могу скрыть папку. 0 означает OK, не так ли?

2. @osr да 0 означает успех. Проверьте, что каталог действительно имеет атрибут hidd через свойства проводника или каталог.

3. да, я проверил, и это так не скрыто, мне интересно, связано ли это с тем, что эта папка находится внутри каталога bin. Возможно, eclipse касается его и возвращает его в видимое состояние сразу после запуска программы. Я соглашусь с этим…