Java система не может найти указанный файл при попытке выполнить - PullRequest
1 голос
/ 07 мая 2020

Я хочу выполнить массив команд в моем каталоге. Когда я нажимаю cd C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe 4 в командной строке, все работает нормально. Но когда я выполняю следующий код, я получаю FileNotFoundException, потому что «Система не может найти указанный файл».

    Runtime.getRuntime().exec(getCMDs());

    ...

    private static String[] getCMDs() {
        String cd = "cd C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe " + index;
//      String cd = "cd " + path + "/Abgabe " + index;
        String init = "git init";
        String add = "git add .";
        String commit = "git commit -m \"Inital commit\"";

        return new String[] {cd, init, add, commit};
    }

Я попытался использовать Runtime.getRuntime().exec(getCMDs(), null, file) с необходимыми изменениями. Файл был File file = new File("C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe 4");. Загрузка файла не была проблемой, а также System.out.println (file.exists ()); было верно, но выполнение массива привело к той же ошибке.

Спасибо

EDIT:

Да, я попробовал перегруженный метод, как описано выше. Вот код:

File file = new File(path + "/RepoCreator/Abgabe 4");
        System.out.println(file.exists());
        try {
            Runtime.getRuntime().exec(getCMDs(), null, file);
...

    private static String[] getCMDs() {
        String init = "git init";
        String add = "git add .";
        String commit = "git commit -m \"Inital commit\"";

        return new String[] {init, add, commit};
    }

К сожалению, это не имеет значения.

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Похоже, вы пытаетесь выполнить git команды в указанном каталоге.

Вы можете попробовать использовать перегруженную версию метода exe c:

public Process exec(String[] cmdarray,
           String[] envp,
           File dir)

Вот пример на SO (фрагмент ниже)

Process process2=Runtime.getRuntime().exec("myfile",
    null, new File("/data/data/my-package/files"));

Изменить: В вашем getCMDs() опустите команду cd снова при использовании этого метода exec().

return new String[] {"git","init"};

, а затем выполнить следующую команду с ее аргументами.

Я думаю, нам нужно передать каждый аргумент как отдельный элемент массива, потому что при выполнении notepad myfile.txt Мне нужно было бы сделать ..

String st[] = { "notepad", "myfile.txt"};
Process p = Runtime.getRuntime().exec(st,null,new File("D:/test dir/"));

Так что вы также можете сделать что-то вроде

String st[] = {"git","init"}

См. Следующее суть

0 голосов
/ 07 мая 2020

Разве вам не нужно экранировать символы sla sh?

0 голосов
/ 07 мая 2020

Не знаю, заметили ли вы это, но у вас отсутствует последняя буква «4» -> «cd C: / Users / Lennart / sciebo / Semster 2 / Info / RepoCreator / Abgabe 4»

Если это просто опечатка, возможно, вы можете попробовать использовать двойную черту, например:

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