принудително създаване на директория с помощта на команда 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
String command = mkdir /webroot/v3;// опитайте { Runtime runtime = Runtime.getRuntime(); Процес процес = runtime.exec(команда); } catch (Exception ex) { }   -  person Pritom    schedule 06.12.2011
comment
Trsy strace-ing вашата Java VM; ще разбереш защо твоето 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

Защо не използвате функцията mkdir на Java който извиква директно системното извикване на 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