2017-03-02 35 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

爲什麼bytesRead是雙精度的?它不應該是一個整數值(int或可能很長) – Matt

回答

1

How to get the size of an InputStream?

的InputStream天然不具有的尺寸。可以想象, 永遠保持傳送字節。或者生產端可以在沒有警告的情況下結束 流。

如果你必須找出長度,那麼你必須讀到最後, 計數的字節,並報告完成時的長度。

我假設批處理文件返回一個結果,並且你不希望有批處理文件的大小。

因爲批處理以流的形式返回結果,所以您不知道流的大小。 如果批處理將結果寫入另一個文件,則可以使用文件長度開始讀取結果文件。


UPDATE
您指出的批處理邏輯。 批處理檢出SVN項目,並且您想要檢出元素的數量。這是一個不同的要求!

它更像是另一個SVN請求,你必須使用。你可以先問一下特定文件夾的SVN子項。之後,您必須閱讀結帳流結果並分析內容。

您必須搜索關鍵詞定義,結帳命令finsihed(成功和不成功)。這將增加進度計數器而不是流字節。

+0

該批處理文件包含用於簽出項目的svn命令。我怎樣才能得到總結帳項目?任何建議? – DrunkenAvenger

+1

@DrunkenAvenger也許這有助於:http://stackoverflow.com/q/15093884/982149 – Fildor

+0

@Markus這正是我想要的。我可以使用SVNKit api來實現這個嗎? – DrunkenAvenger