0

クラウドのGoogleストレージからフォルダをダウンロードしようとしています。javaからgsutilsを実行しようとしていません

public void runCommand() { 
    final Process p; 
    try { 
     p = Runtime.getRuntime().exec(
      "gsutil -m cp -r gs://my_bucket/705/201609040613/output/html_pages file:/Users/eladb/WorkspaceQa/GsClient/build/resources/main/downloads/"); 

     new Thread(new Runnable() { 
     public void run() { 
      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line = null; 

      try { 
       while ((line = input.readLine()) != null) 
        System.out.println(line); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 

    p.waitFor(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

が、返すことはありません新しいスレッド:

は、私はこのコードを持っている(私はMac上で通常の端末から実行したときに、それが動作する)権限を持つユーザー

のプロセスから実行されます。ライン上で立ち往生

while ((line = input.readLine()) != null)

は、そうでない場合はGoogleのクラウドからこれらのフォルダをダウンロードする方法はありますか?

答えて

1

stdoutこのデータの手動コピーがエラーが発生しやすい(あなたが強制的にサブスレッドを終了するために、ストリームをクローズしなければならない)とありがたい、unnecessary since Java 7です:あなたはすべての3つを指示したくない場合は

public void runCommand() { 
    try { 
     new ProcessBuilder("gsutil", "-m", "cp", "-r", 
      "gs://my_bucket/705/201609040613/output/html_pages", 
      "file:/Users/eladb/WorkspaceQa/GsClient/build/resources/main/downloads/") 
     .inheritIO() 
     .start() 
     .waitFor(); 
    } catch(IOException | InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

この方法では、redirectOutput(File)redirectOutput(ProcessBuilder.Redirect)、および同様の入力チャネルとエラーチャネルの方法を参照してください。

入力を提供したり、サブプロセスがrunnigている間に出力を受け取るためにあなたを必要とし ProcessBuilder.Redirect.PIPEのみ(デフォルト)モード

関連する問題