您可以测试下面提到的代码来测试您的mysqldump命令输出。根据我的假设,文件未创建可能有两个主要原因:
- 如果使用的是Windows,则目标位置的UAC权限可能是问题所在。
您可能会遇到在最终生成的供Java运行时执行的mysqldump命令中出现语法问题。
Process exec = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;"});
if(exec.waitFor()==0)
{
InputStream inputStream = exec.getInputStream();
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
String str = new String(buffer);
System.out.println(str);
}
else
{
InputStream errorStream = exec.getErrorStream();
byte[] buffer = new byte[errorStream.available()];
errorStream.read(buffer);
String str = new String(buffer);
System.out.println(str);
}
在使用Process exec = Runtime.getRuntime().exec("C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;");
时,重定向运算符无法正常工作。
这是因为它没有调用命令 shell,所以我们无法获得重定向运算符的功能。为了解决这个问题,我们可以执行一个命令提示符(cmd),然后是mysqldump命令,它就可以正常工作了。
Process exec = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump "+fisier.getName()+" > C:\\"+fisier.getName()+".sql;"});
这里的/c在cmd.exe中表示执行传递的命令并终止进程。
当Java运行时实际的命令将变成
cmd.exe /c yourmysqldumpCommand
fisier.getName()
的值是什么? - Sotirios DelimanolisProcess
дёиЇ»еЏ–ж ‡е‡†InputStream
е’Њй”™иЇЇInputStream
гЂ‚ - Sotirios Delimanolisif(jFileChooserSave.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){ File fisier = jFileChooserSave.getSelectedFile(); - bluesony
Runtime#exec()
返回一个Process
对象。获取并读取它的错误输入流。 - Sotirios Delimanolis