我正在尝试通过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:无法执行二进制文件
我该如何解决这个问题。任何帮助表示赞赏。
谢谢
答案 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"};
相反