在Ubuntu中使用Java运行二进制文件

时间:2011-11-29 14:47:42

标签: java ubuntu binaryfiles

我正在尝试通过java代码运行二进制文件,即Genia Sequence Splitter。此二进制文件是x-executable类型,没有扩展名。我可以使用./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 个答案:

答案 0 :(得分:1)

运行程序时,相对于程序的起始目录的可执行文件是否位于" ./ genias / genias"?注意" /./"除了浪费空间之外什么也不做,因为它是"链接回当前目录的子目录"。

也许你的" genias"可执行文件不在名为" genias"的子目录中,或者启动程序是从不同的目录启动的,无法找到" genias / genias"相对于它的目录。

正如其他地方所建议的那样,您可以通过在启动命令中使用绝对路径来解决此问题。但是,如果您想要安装多个副本,有时候这还不够灵活。

答案 1 :(得分:0)

我会先尝试从Java运行命令pwd,看看你到底在哪里。然后,您可以相应地更改可执行文件的路径。我想使用路径/home/xxx/yyy/geniass将始终有效。

还有一个不同版本的Runtime.exec(),它将工作目录作为参数。

答案 2 :(得分:0)

尝试:

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

相反