我有以下代码:
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.
帮助我纠正我的错误或让我知道如何转换过程'分成百分比。
答案 0 :(得分:1)
How to get the size of an InputStream?
InputStream本身并没有大小。可以想象 继续永远传递字节。或者生产端可以结束 流没有警告。
如果你必须找出长度,那么你必须阅读到最后, 计算字节数,并在完成时报告长度。
我假设批处理文件返回结果,并且您不希望具有批处理文件的大小。
因为批处理以流形式返回结果,所以您不知道流的大小。 如果批处理将结果写入另一个文件,则可以使用文件长度开始读取结果文件。
<强>更新强>
您指出了批处理逻辑。
Batch会检出SVN项目,并且您希望拥有已检出元素的数量。这是一个不同的要求!
它更像是您必须使用的另一个SVN请求。您可以先询问特定文件夹的SVN子项。之后,您必须阅读结帐流结果并分析内容。
你必须搜索关键词定义,结帐命令finsihed(成功和不成功)。这将增加进度计数器而不是流字节。