在Ubuntu中使用Java运行二进制文件
我正在尝试运行一个二进制文件,它是通过java代码生成的Genia序列拆分器。此二进制文件的类型为x-可执行文件,没有扩展名。我可以使用在Ubuntu中使用Java运行二进制文件,java,ubuntu,binaryfiles,Java,Ubuntu,Binaryfiles,我正在尝试运行一个二进制文件,它是通过java代码生成的Genia序列拆分器。此二进制文件的类型为x-可执行文件,没有扩展名。我可以使用/geniass arg1 arg2 其中arg1是输入文件arg2是输出文件 我想自动化这个过程。我试着使用这个代码 public class geniaSSTag { public static void geniaSS(String inputFile){ System.out.println("Input file: "+
/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:无法执行二进制文件
我怎样才能解决这个问题。感谢您的帮助
谢谢我将首先尝试从Java运行命令
pwd
,以查看您的实际位置。然后可以相应地更改可执行文件的路径。我想使用路径/home/xxx/yyy/geniass
总是可行的
还有一个不同版本的Runtime.exec()
,它将工作目录作为参数。尝试:
String[]cmd={"/full/path/to/geniass","in.txt","out.txt"};
相反当您运行程序时,可执行文件是否以“/genias/genias”的方式相对于程序的起始目录?注意“/。/”除了浪费空间外,什么都不做,因为它是“链接回当前目录的子目录”的缩写 可能您的“genias”可执行文件不在名为“genias”的子目录中,或者启动程序是从另一个目录启动的,并且找不到相对于其目录的“genias/genias”
正如其他地方所建议的,您可以通过在启动命令中使用绝对路径来修复此问题。但是,如果您希望安装多个副本,有时这种方法不够灵活。文件是否可执行?您是否使用chmod+x文件名?是否尝试使用绝对路径运行它?此外,bash是不必要的。请尝试使用字符串[]cmd={“geniass的绝对路径”、“in.txt”、“out.txt”};另外,请使用ProcessBuilder而不是
Runtime.exec
谢谢大家。我什么都试过了,但它总是给我同样的错误。所以我写了一个script.sh并运行它,解决了这个问题。我有预感这可能是一个权限错误。但不管怎样,现在一切都好了。