2017-03-02 10 views
0

にバッチファイルの処理を変換するには:私が何をしようとしています何は、どのように私はコードの一部、以下のいる割合

File file = new File("//path/to/BatchFile"); 
    long fileLength = 0 ; 
    if(file.exists()){ 
     fileLength = file.length(); 
    } 

    Process process = Runtime.getRuntime().exec("cmd /c " + "//path/to/batchfile"); 
    InputStream inputStream = process.getInputStream(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 

    String s; 
    long bytesRead=0; 

    while ((s = br.readLine()) != null) { 
      bytesRead = bytesRead + s.getBytes().length + 2; // forget about +2 
      int progress = (int) ((bytesRead/ fileLenth)*100); 
      System.out.println("Progress : "+ progress); 

    } 

は、バッチファイルを実行すると、プログレスバーのパーセンテージを計算するためにBufferedReaderのためにそれを変換しています。しかし、私の割合は100を超えています。

私が間違っていることを修正したり、「プロセス」のパーツをパーセンテージに変換する方法を教えてください。

+1

「+ 2」部分はどういう意味ですか? – Berger

+0

私は彼がキャリッジリターンを意味すると思う – Andremoniy

+0

なぜバイトはダブルですか?それは整数値ではないはずです(intまたはおそらくlong) – Matt

答えて

1

How to get the size of an InputStream?

アンのInputStreamは、本質的に大きさを持っていません。おそらく はバイトを永遠に配信し続けることができます。または、制作側が警告なしで ストリームを終了する可能性があります。

長さを確認する必要がある場合は、末尾に、 バイトを数えて、終了時の長さを報告する必要があります。

バッチファイルが結果を返し、バッチファイルのサイズを保持したくないと思います。

ストリームはストリームとして結果を返しますので、ストリームサイズはわかりません。 バッチが結果を別のファイルに書き込む場合は、ファイル長を使用して結果ファイルの読み取りを開始できます。


UPDATE
あなたは、バッチロジックを指摘しました。 バッチはSVNプロジェクトをチェックアウトし、チェックアウトされた要素の数を取得したいとします。これは別の要求です!

これはもっと使いたい別のSVNリクエストです。最初に、特定のフォルダのSVN子を尋ねることができます。その後、チェックアウトストリームの結果を読み込んで内容を分析する必要があります。

チェックアウトコマンドが実行された(成功していて成功していない)ことを定義するキーワードを検索する必要があります。これにより、ストリームバイトではなく進行カウンタが増加します。

+0

バッチファイルには、プロジェクトをチェックアウトするためのsvnコマンドが含まれています。どうすれば総チェックアウトプロジェクトを手に入れることができますか?なにか提案を? – DrunkenAvenger

+1

@DrunkenAvengerこれはおそらく助けます:http://stackoverflow.com/q/15093884/982149 – Fildor

+0

@マークス正確にこれは私が望んだものです。これを達成するためにSVNKit APIを使用できますか? – DrunkenAvenger

関連する問題