【问题标题】:How to convert processing of batch file into percentage如何将批处理文件的处理转换为百分比
【发布时间】:2017-03-02 09:28:23
【问题描述】:

我有以下代码:

    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。

帮助我纠正我做错了什么或让我知道如何将“过程”部分转换为百分比。

【问题讨论】:

  • + 2 部分是什么意思?
  • 我认为他的意思是回车
  • 为什么 bytesRead 是双精度的?它不应该是一个整数值(int 或者 long)
  • 这对我来说没有意义。批处理文件的输出与其文件长度有什么关系?它自己打印吗?顺便说一句:如果文件不存在,您应该跳过其余部分。否则你会遇到异常。

标签: java batch-file io


【解决方案1】:

How to get the size of an InputStream?

InputStream 本身没有大小。可以想象得到 永远传递字节。或者生产端可以结束 毫无警告地流式传输。

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

我假设批处理文件返回一个结果,而您不希望有批处理文件的大小。

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


更新
您指出了批处理逻辑。 Batch 签出 SVN 项目,并且您想要签出元素的数量。这是一个不同的要求!

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

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

【讨论】:

  • 批处理文件包含用于签出项目的 svn 命令。我怎样才能获得总结帐项目?有什么建议吗?
  • @Markus 这正是我想要的。我可以使用 SVNKit api 来实现吗??
  • @Fildor 非常感谢,我想你已经为我提供了 Markus 指出的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2012-01-10
  • 2011-01-07
  • 1970-01-01
  • 2019-05-11
  • 2011-03-07
  • 2014-06-13
相关资源
最近更新 更多