Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ubuntu中使用Java运行二进制文件_Java_Ubuntu_Binaryfiles - Fatal编程技术网

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

在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: "+

我正在尝试运行一个二进制文件,它是通过java代码生成的Genia序列拆分器。此二进制文件的类型为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:无法执行二进制文件

我怎样才能解决这个问题。感谢您的帮助


谢谢

我将首先尝试从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并运行它,解决了这个问题。我有预感这可能是一个权限错误。但不管怎样,现在一切都好了。