принудительно создать каталог с помощью команды bash через код Java

Я в беде. Я пытаюсь принудительно создать папку с помощью команды bash через код Java на сервере Linux. Мой код выглядит следующим образом:

String command = "/root/new_scripts/makedir.sh /webroot/Own";
    try {
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(command);
        return "true";
    } catch (Exception ex) {
        return ex.toString();
    }

и файлы makedir.sh содержат

#!/bin/bash
mkdir $1

Но он не может создать каталог.

А также попробуйте создать каталог, просто используя код Java, следующим образом:

String s = null;
    try {
        Process p = Runtime.getRuntime().exec("mkdir /webroot/Own");
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        // read the output from the command
        System.out.println("\n\n\nHere is the standard output of the command:\n");
        while ((s = stdInput.readLine()) != null) {
            System.out.println(s);
        }
        // read any errors from the attempted command
        System.out.println("Here is the standard error of the command (if any):\n");
        while ((s = stdError.readLine()) != null) {
            System.out.println(s);
        }
    } catch (Exception ex) {
        System.out.println("\n\n\nexception happened - here's what I know: ");
        ex.printStackTrace();
    }

Но это дает мне следующую ошибку-

Вот стандартный вывод команды:

Вот стандартная ошибка команды (если есть):

mkdir: невозможно создать каталог `/webroot/Own': Отказано в доступе


person Pritom    schedule 06.12.2011    source источник
comment
Пожалуйста, запишите вывод процесса в stdout и stderr и предоставьте его также в своем посте. И обработайте код выхода.   -  person dma_k    schedule 06.12.2011
comment
Подсказка: вам не нужно вызывать внешний скрипт, так как mkdir является исполняемым файлом в Linux. Просто используйте команду mkdir /webroot/v3custompritom.   -  person dma_k    schedule 06.12.2011
comment
Строковая команда = mkdir /webroot/v3;// try { Runtime runtime = Runtime.getRuntime(); Процесс процесс = runtime.exec (команда); } поймать (Исключение ex) { }   -  person Pritom    schedule 06.12.2011
comment
Попробуйте strace запустить вашу виртуальную машину Java; вы поймете, почему ваш mkdir терпит неудачу.   -  person Basile Starynkevitch    schedule 06.12.2011
comment
@Pritom: вы не обновили свой вопрос, как я задал в своем первом комментарии. Ознакомьтесь с теми же советами здесь и решениями здесь и более правильно здесь.   -  person dma_k    schedule 06.12.2011
comment
Эй, чувак, я отредактировал свой вопрос, пожалуйста, взгляни на него. Это не дает мне разрешения на создание каталога, но я хочу создать каталог принудительно.   -  person Pritom    schedule 07.12.2011


Ответы (3)


попробуйте изменить права доступа к каталогу вашего проекта: chmod +w /<your project directory> затем используйте команду mkdir.

person dj buen    schedule 06.12.2011
comment
Это было бы невозможно. Есть ли другая идея принудительно создать каталог, например принудительно удалить каталог? - person Pritom; 06.12.2011

Почему бы вам не использовать функцию Java mkdir который напрямую вызывает системный вызов mkdir ?

Вероятно, это не удается из-за проблем с разрешениями.

person Basile Starynkevitch    schedule 06.12.2011
comment
Если системный вызов не удался, он выдаст вам код ошибки, объясняющий, почему. - person Basile Starynkevitch; 06.12.2011

Обработка вывода процесса в Java — не самая простая задача. Если это только для отладки, я бы изменил makedir.sh так;

mkdir $2 > err.txt 2>err.txt

Запустите свой код Java, а затем проверьте err.txt — ожидайте найти там что-то вроде permission denied. Для производственного кода вы хотели бы, чтобы ваше Java-приложение знало об ошибке makedir.sh. Прочтите эту замечательную статью с советами о том, как правильно читать поток процесса.

person mbatchkarov    schedule 06.12.2011
comment
Это из-за отказа в разрешении, но есть ли способ принудительно создать папку? - person Pritom; 06.12.2011