调用Runtime.getRuntime()。EXEC()

时间:2010-01-27 12:18:27

标签: java runtime.exec

仅当数据库名称包含like(new database(myid)等)时才能读取文件。 我给出了以下示例代码:

dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+databaseName;
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(dumpCommand);                     
InputStream in = proc.getInputStream();              
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String line =null;

 while((line=br.readLine())!=null)
{
//able to read line only when database name like abc,datastore etc...
System.out.println(line);
    }

假设我的数据库名称de mo表示当我打印行时,我得到了像de only这样的数据库名称。 数据库名称是否为空?

5 个答案:

答案 0 :(得分:15)

您熟悉exec双引号错误吗? (适用于Runtime.execProcessBuilder

您可以尝试:

Runtime.getRuntime().exec(new String[] {
  "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\"", 
  "-h", 
  hostName+user+databaseName});

只需确保您传递的所有参数都不包含双引号(以双引号开头)
(参见 bug 6511002

任何参数如:

mykey="my value with space"

内部(由getRuntime()实施)更改为

"mykey="myvalue with space""

如果是这种情况,则需要对参数进行标记:

{"mykey=\"my\"" , "\"value with space\""}

答案 1 :(得分:2)

Java和操作系统需要知道命令是什么以及参数是什么。所以:

1)您可以尝试使用exec(String, String[])分别提供cmd和args

2)你可以将mysqldump命令和每个参数括在操作系统的双引号中,以便了解它们的单个内容。

如果使用(1)选项,mysqldump程序将在数组中按项接收一个参数,无论空格还是其他。

答案 2 :(得分:2)

文件路径包含空格,可能是(其中一个)问题。试试这个:

dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
               +hostName+user+databaseName;

并按照phisch的Suggstion打印dumpCommand字符串以仔细检查它是否是一个有效的mysqldump调用

答案 3 :(得分:0)

似乎mysqldump语法有点不同。以下是我的工作示例 mysqldump -h mysserver -u root -p my_db -R> create_db.sql 我认为你应该使用“”或“`来复杂的名字(没有检查过我自己)。

答案 4 :(得分:0)

我不确定我是否完全理解你的问题,但你的dumpCommand似乎将所有变量(hostName,user,databaseName)连接成一个大字符串。

执行System.out.println(dumpCommand);看看你是否真的想要执行它。

你可能在这里遗漏了一些空格。

如果“ - ”本身是个问题,你可能想要转义它,否则mysqldump会认为它是一个参数。