使用Java将字符串与CMD输出进行比较

使用Java将字符串与CMD输出进行比较,java,cmd,java.util.scanner,processbuilder,Java,Cmd,Java.util.scanner,Processbuilder,我试图创建一个方法,根据sfc/scannow的结果返回true或false,但由于某种原因,字符串比较总是返回false,即使它打印的内容与我比较的内容完全相同。有什么想法吗 ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "sfc /scannow"); builder.redirectErrorStream(true); Process p = builde

我试图创建一个方法,根据sfc/scannow的结果返回true或false,但由于某种原因,字符串比较总是返回false,即使它打印的内容与我比较的内容完全相同。有什么想法吗

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "sfc /scannow");
builder.redirectErrorStream(true);
Process p = builder.start();
Scanner sn = new Scanner(new InputStreamReader(p.getInputStream()));
while (sn.hasNextLine()) {
    String line = sn.nextLine();
    System.out.println(line);
    if(line.equalsIgnoreCase("Windows Resource Protection did not find any integrity violations.")) {
        isHealthy = true;
        break;
    }
}
if(isHealthy == true) {
    return true;
}
else if(isHealthy == false) {
    return false;
}

在这种情况下,您正在比较对象,而不总是比较值本身,因此使用contentEquals可以很好地进行检查:

...
if(line.contentEquals("What Do you want to verify")) { condition }
让我知道这是否适合你


字符串#equals()不仅比较字符串的内容,还检查另一个对象是否也是字符串的实例。字符串#contentEquals()只比较内容(字符序列),不检查另一个对象是否也是字符串的实例

您能提供输出吗?您当然知道在命令窗口(cmd.exe)中运行
sfc
该命令窗口必须以管理员身份运行。@AdrianRusso
B e g i n i n g s y s t e m s c n。这是一个很好的解决方案。B g i n i n g i f i c a o n p h a s e o f s y s t m s c n。在0%c o m p l e上的V e r i f i c a t。。。。在100%的成本率上进行风险评估。您可以在您的问题中找到以上信息,而不是在评论中。所有与问题相关的重要信息都应该在问题本身中。请回答你的问题。另外,请检查和。看起来像
新的InputStreamReader(p.getInputStream(),StandardCharsets.utf16le)
将是必需的。由于某些原因,与字符串相比,这仍然返回false此。。。。。在if之前,System.out.println(line)的结果是什么;?