Запуск двоичного файла с использованием Java в Ubuntu - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь запустить двоичный файл, который является Genia Sequence Splitter через Java-код.Этот двоичный файл имеет тип x-исполняемый и не имеет расширения.Я могу запустить файл в терминале, используя ./geniass arg1 arg2, где arg1 - входной файл, arg2 - выходной файл. Я хочу автоматизировать этот процесс.Я пытался использовать этот код

    public class geniaSSTag {
    public static void geniaSS(String inputFile){
        System.out.println("Input file: "+inputFile);

        String[]cmd={"bash","geniass/./geniass","in.txt","out.txt"};

        try {
            String errOutput="";
Process process = Runtime.getRuntime().exec(cmd);
String s = "";
BufferedReader br = new BufferedReader(new InputStreamReader(process
                        .getInputStream()));
while ((s = br.readLine()) != null)
{
   s += s + "\n";
}    
System.out.println(s);

BufferedReader br2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while (br2.ready() && (s = br2.readLine()) != null)
{
  errOutput += s;
}
System.out.println(errOutput);
        } catch (IOException ex) {
            Logger.getLogger(geniaSSTag.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Но я получаю эту ошибку, когда пытаюсь запустить

geniass /./ geniass: geniass /./ geniass: не удается выполнить двоичный файл

Как я могу решить это.Любая помощь приветствуется.

Спасибо

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

Когда вы запускаете программу, является ли исполняемый файл относительно начального каталога программы так, как он лежит в "./genias/genias"? Обратите внимание, что «/./» ничего не делает, кроме пустого пространства, так как это сокращение от «подкаталога, который ссылается на текущий каталог».

Возможно, ваш исполняемый файл "genias" не находится в подкаталоге с именем "genias", или запускаемая программа запускается из другого каталога и не может найти "genias / genias" относительно своего каталога.

Как предлагается в другом месте, вы можете исправить это, используя абсолютный путь в команде запуска. Однако иногда это просто недостаточно гибко, если вы хотите установить несколько копий.

0 голосов
/ 29 ноября 2011

Попробуйте:

String[]cmd={"/full/path/to/geniass","in.txt","out.txt"};

Вместо

0 голосов
/ 29 ноября 2011

Я бы сначала попытался запустить команду pwd из Java, чтобы увидеть, где вы на самом деле. Затем вы можете изменить путь к вашему исполняемому файлу соответственно. Я думаю, что использование пути /home/xxx/yyy/geniass всегда будет работать.

Также существует другая версия Runtime.exec(), которая принимает рабочий каталог в качестве аргумента.

...