如何将批处理文件的处理转换为百分比

时间:2017-03-02 09:28:24

标签: java batch-file io

我有以下代码:

    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 个答案:

答案 0 :(得分:1)

How to get the size of an InputStream?

  

InputStream本身并没有大小。可以想象   继续永远传递字节。或者生产端可以结束   流没有警告。

     

如果你必须找出长度,那么你必须阅读到最后,   计算字节数,并在完成时报告长度。

我假设批处理文件返回结果,并且您不希望具有批处理文件的大小。

因为批处理以流形式返回结果,所以您不知道流的大小。 如果批处理将结果写入另一个文件,则可以使用文件长度开始读取结果文件。


<强>更新
您指出了批处理逻辑。 Batch会检出SVN项目,并且您希望拥有已检出元素的数量。这是一个不同的要求!

它更像是您必须使用的另一个SVN请求。您可以先询问特定文件夹的SVN子项。之后,您必须阅读结帐流结果并分析内容。

你必须搜索关键词定义,结帐命令finsihed(成功和不成功)。这将增加进度计数器而不是流字节。