2012-12-31 32 views
-1

**當上直接運行下面的命令工作正常終端在linux從Java運行的mysqldump

mysqldump -uabc -pabc1234 --compact --no-create-info -w \"fieldname != 'A'\" dbname tablename -hhostaddress --result-file=/tmp/myfile.txt 

**但是當使用運行時()方法執行它然後也不會產生在目標輸出文件。

String s="mysqldump -uabc -pabc1234 --compact --no-create-info -w \"fieldname != 'A'\" dbname tablename -hhostaddress --result-file=/tmp/myfile.txt"; 
Runtime.getRuntime().exec(s); 

(**說ABC是用戶名和ABC1234密碼)

同樣的問題時,如果重定向到目標文件(>)是 - 結果文件選項的usedinstead。 我該怎麼做才能在java程序中執行它?

+0

只是一個猜測旁邊添加:也許你應該嘗試把文件的完整路徑引號:'\「/ tmp目錄/ myfile.txt的\」'。您還可以將輸出重定向到如[* here *]所示的文件(http://go2linux.garron.me/mysql-backup-mysqldump) – alfasin

+0

您需要將命令拆分爲多個部分,而不是將它作爲一個整體發送長串。 – Perception

回答

0

使用ProcessBuilder API更好地處理空格。輸出將在結果文件中。

new ProcessBuilder("mysqldump" , "-uabc", "-pabc1234", ...).start(); 

'>'是Shell間接尋址 - 它在你的程序是shell的情況下起作用。

new ProcessBuilder("bash", -"c "mysqldump" , "-uabc", "-pabc1234", ..., "> fileresult" ).start(); 
0

爲unachiveing文件我用

final Runtime r = Runtime.getRuntime(); 
      final Process p = r.exec("/bin/tar -xvf " + zipFile, null, fileDir); 

其中的壓縮文件 - 目標文件名, FILEDIR - 當前目錄路徑(這裏需要把文件)

而且我用「/斌/焦油「因爲直接的」tar「在Runtime.exec環境中隱藏了。嘗試使用直接路徑(僅用於測試)。

原木只是在最後

 final int returnCode = p.waitFor(); 

     if (logger.isDebugEnabled()) { 
      final BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line; 
      while ((line = is.readLine()) != null) { 
       logger.debug(line); 
      } 
      final BufferedReader is2 = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
      while ((line = is2.readLine()) != null) { 
       logger.debug(line); 
      } 
     }