finden kann ich ProcessBuilder
bin mit einem mysqldump von Java-Code auszuführen und dies ist mein CodeProcess Builder verursacht error2 nicht Pfad angegeben, obwohl der Befehl ausgeführt von cmd
public static void executeCommant(String... command) throws Exception {
ProcessBuilder processBuilder = null;
processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int resultCode = process.waitFor();
if (resultCode != 0) {
throw new Exception("" + readCommandOutput(process.getInputStream()));
}
}
private static String readCommandOutput(InputStream inputStream) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + System.getProperty("line.separator"));
}
} finally {
br.close();
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
executeCommant("mysqldump -u root -P 3316 -h localhost > G:\\test.sql");
}
Problem ist, ich die folgende Ausnahme erhalten, auch obwohl wenn ich denselben Befehl von cmd ausführe, bekomme ich kein Problem, und ich kann nur nicht herausfinden, warum es die angegebene Datei nicht finden kann !! PS: Ich habe versucht, den vollständigen Pfad für die mysqldump.exe mit geben und bekam das gleiche Ergebnis
Exception in thread "main" java.io.IOException: Cannot run program "mysqldump -u root -P 3316 -h localhost > G:\test.sql": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
at com.etq.e2mc.platform.windows.WindowsProcess.executeCommant(WindowsProcess.java:46)
at com.etq.e2mc.platform.windows.WindowsProcess.main(WindowsProcess.java:67)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:177)
at java.lang.ProcessImpl.start(ProcessImpl.java:28)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 2 more
vielen Dank für die wertvolle Information Ich ehrlich gesagt nicht, dass wusste, ich den Code versuchen Sie geschrieben und bin immer 'Die Methode redirectOutput (Datei) ist nicht definiert für den Typen ProcessBuilder', Sie haben keinen anderen Vorschlag Wie soll ich die Ausgabe umleiten ?, soll ich nur cmd aufrufen und dann mysqldump ?? - PS: Ich benutze Java 6 und kann nicht upgraden, da viel nicht auf Java getestet wird. 7 – user1
Dann müssen Sie einen eigenen Thread schreiben, um Daten aus dem von 'getInputStream()' zurückgegebenen Eingabedatenstrom in die Datei zu pumpen. – Andreas