Java 使用ProcessBuilder运行sdelete时未在标准输出上更新的百分比

Java 使用ProcessBuilder运行sdelete时未在标准输出上更新的百分比,java,stream,processbuilder,Java,Stream,Processbuilder,有一个名为的程序明确地从系统内部删除磁盘可用空间。如果使用sdelete.exe-c执行,它将清除所有可用空间,并显示到标准输出的进度百分比 因此,我尝试使用以下方法编写代码: public class deleteTest { public static void main(String[] arg){ ProcessBuilder p = new ProcessBuilder("sdelete.exe","-c"); try {

有一个名为的程序明确地从系统内部删除磁盘可用空间。如果使用
sdelete.exe-c
执行,它将清除所有可用空间,并显示到标准输出的进度百分比

因此,我尝试使用以下方法编写代码:

public class deleteTest {
    public static void main(String[] arg){
        ProcessBuilder p = new ProcessBuilder("sdelete.exe","-c");
        try {
            Process pGet = p.start();
            p.redirectError(p.redirectInput());
            InputStream is = pGet.getInputStream();

            int ch;

            while((ch = is.read()) != -1){
                System.out.print((char)ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }   
    }
}
但是它没有显示百分比,它只是不断显示C:\:0%上的可用空间归零。该过程不会挂起或冻结,但当它完成时,所有百分比立即显示出来


如何修复此问题?

我担心您将错过错误流及其消息。考虑改变

p.redirectError(p.redirectInput());
致:


这样,如果您的流程构建代码不正确,您至少可以了解原因。

谢谢,但是。。这不是这个问题的原因。。不管怎样,我把它修好了。thanks@user3329872:请告诉我您现在是否会看到以前不可见的错误消息。mm。。程序不会出错。。唯一的问题是标准输出百分比没有更新。。我认为它似乎不使用标准输出,而是将输出输出到控制台。。
p.redirectErrorStream(true);