Я пытаюсь использовать Process.waitFor (), чтобы дождаться, пока mysqldump завершит процесс резервного копирования. Вот мой код.
///i use this mysql command, its working fine
String dump = "bkprefs/mysqldump "
+ "--host=localhost "
+ "--port=3306 "
+ "--user=root "
+ "--password= "
+ "--add-drop-table "
+ "--add-drop-database "
+ "--complete-insert "
+ "--extended-insert "
+ "test";
//execute the command
Process run = null;
try {
run = Runtime.getRuntime().exec(dump);
int stat = run.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
Проблема в том, что run.waitfor()
зависает. Кажется, что он продолжает ждать чего-то, что не произойдет.
Когда я заменяю строку int stat = run.waitFor()
на Thread.sleep(5)
, резервная копия работает нормально. Но я не могу придерживаться этого, потому что время резервного копирования будет зависеть от размера базы данных, поэтому использование Thread.sleep
для ожидания завершения процесса резервного копирования небезопасно.
Пожалуйста, помогите мне. Ответы с благодарностью.
Редактировать:
Я использую его входной поток, используя следующий код.
InputStream in = run.getInputStream();
FileWriter fstream = null;
try {
fstream = new FileWriter("haha.sql");
} catch (IOException ex) {
ex.printStackTrace();
}
BufferedWriter out = new BufferedWriter(fstream);
int nextChar;
StringBuffer sb = new StringBuffer();
try {
while ((nextChar = in.read()) != -1) {
out.write((char) nextChar);
//sb.append((char) nextChar);
}
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}