【问题标题】:Percentage not updating on stdout when running sdelete with ProcessBuilder使用 ProcessBuilder 运行 sdelete 时未在标准输出上更新的百分比
【发布时间】:2014-08-12 12:13:01
【问题描述】:

有一个名为"sdelete" 的程序从 sysinternals 中清楚地删除了磁盘可用空间。如果您使用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();
        }   
    }
}

但它没有显示百分比,它只是一直显示Zeroing free space on C:\: 0%。该过程不会挂起或冻结,但当它完成时,所有百分比都会立即显示!

我该如何解决这个问题?

【问题讨论】:

    标签: java stream processbuilder


    【解决方案1】:

    我担心您会完全错过错误流及其设置的消息。考虑改变

    p.redirectError(p.redirectInput());
    

    到:

    p.redirectErrorStream(true);
    

    这样,如果您的流程构建代码不正确,您至少会明白原因。

    【讨论】:

    • 谢谢,但是..这不是这个问题的原因..无论如何我都会解决它。谢谢
    • @user3329872:如果您现在会看到以前不可见的错误消息,请告诉我。
    • mm.. 程序没有任何错误.. 唯一的问题是标准输出百分比没有更新.. 我认为它似乎不使用标准输出而是输出到控制台..
    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多