Java ProcessBuilder和RunTime.exec未在代码中运行my

Java ProcessBuilder和RunTime.exec未在代码中运行my,java,processbuilder,runtime.exec,Java,Processbuilder,Runtime.exec,我正在用java为我的mongodb服务器编写一个应用程序,我需要: 1-启动我的Mongo DB服务器(在终端中为“mongod”) 2-访问Mongo并删除一个集合(在终端中执行:“Mongo”、“使用我的数据库”和“db.user\u coll.drop()”) 3-导入新集合(在终端中:“mongoimport--db my_db--collection user_coll--file user_coll” 我可以在终端中实现所有这些,但当我尝试使用ProcessBuilder或getR

我正在用java为我的mongodb服务器编写一个应用程序,我需要:

1-启动我的Mongo DB服务器(在终端中为“mongod”)

2-访问Mongo并删除一个集合(在终端中执行:“Mongo”、“使用我的数据库”和“db.user\u coll.drop()”)

3-导入新集合(在终端中:“mongoimport--db my_db--collection user_coll--file user_coll”

我可以在终端中实现所有这些,但当我尝试使用ProcessBuilder或getRunTime.exec()从Java运行时,无法运行:(

这是我的代码:

String DBPath ="";

if(args.length<=3) {
 System.out.println("Localizando collection em " + System.getProperty("user.home") + "/Desktop/");
 DBPath = System.getProperty("user.home") + "/Desktop/";
}
else { 
 String LastChar = 
 Character.toString(args[3].charAt(args[3].length()-1));
 if (LastChar == "/") {
  System.out.println("Localizando collection em " + args[3]);
  DBPath = args[3];
 }
 else{
  System.out.println("Localizando collection em " + args[3] + "/");
  DBPath = args[3]+ "/";
 }
}

File f = new File(DBPath + "user_coll");
if(f.isFile()) {
 System.out.println("Collection localizada, iniciando servidor MongoDB e derrubando a collection atual...");
 ProcessBuilder proc = new ProcessBuilder(new String[] {"/bin/bash", "-c", "mongod"});
 proc.start().waitFor();
 String echo = "cd "+ System.getProperty("user.dir")+ " && mongo < mongodbscript.js";
 Process proc2 = new ProcessBuilder(new String[] {"bash","-c", echo}).start();
 System.out.println("Importando nova collection...");
 Process proc3 = new ProcessBuilder(new String[] {"bash", "-c", "cd " + DBPath + " && mongoimport --db my_db --collection user_coll --file user_coll"}).start();
 System.out.println("Collection importada...");
}
else {
 System.out.println("Nova collection não localizada, iniciando servidor MongoDB com a collection existente");
 Process proc = new ProcessBuilder(new String[] {"bash", "-c", "mongod"}).start();
}
String DBPath=”“;

if(args.length我一直在MacOS中处理这个问题,并找到了一个解决方法

我将mongoimport命令的完整路径添加到exec命令:

Runtime r  = Runtime.getRuntime();

Process p = r.exec(path + command);
其中path=“/Users/'myname'/Documents/mongoInstallation/bin”
和comand=“mongoimport”

请提供一份报告。仅说明“它不起作用”通常不足以帮助您。“我可以在终端中完成所有这些”因此,当您在终端中运行
mongod
时,终端提示是否会返回?还是程序会继续运行并在终端中打印消息?@Andreas当我在终端中运行
mongod
时,程序会在后台运行并在终端中打印消息。您能在终端窗口中运行其他命令吗你是否运行
mongod
?我问的是运行
mongod
,而不是
mongod&
。我猜不是。这意味着它在前台运行,而不是后台运行,并阻塞了终端。既然
mongod
没有停止,为什么你希望它在从Java运行时停止?
mongod
甚至可能会在e输出缓冲区已满,因为您从未使用其输出。您好@Andreas,当我运行
mongod
时,我无法在终端中运行其他命令,因此我需要打开其他终端才能运行,例如
mongo
。通常我运行
mongod&mongo
(它打开两个终端).关于
mongod
我希望它在后台运行,并且不会停止运行(至少在我完成运行代码之前不要停止)。我尝试在没有
mongod
的情况下运行ProcessBuilder和运行时,例如运行代码:“cd~/Desktop&&mongoimport--db my_db--collection user_coll--file user_coll”但也不要跑。谢谢你帮我。