I have a code written in Java that shows all installed programs on a PC. But for some reason after this line, the program runs 25 seconds longer than usual.
sb.append(reader.lines().collect(Collectors.joining("\n")));
The code itself:
class InstalledPrograms {
public static String getPrograms() {
StringBuilder sb = new StringBuilder();
try {
ProcessBuilder processBuilder = new ProcessBuilder(getCommand().split(" "));
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
sb.append(reader.lines().collect(Collectors.joining("\n")));
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
private static String getCommand() {
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("window"))
return "wmic product get name,version";
if (os.contains("linux"))
return "dpkg --list";
return "pkgutil --pkgs"; // for MacOS
}
}
I tried to use ProcessBuilder - it didn't help. I tried to use toString() to avoid going through each element - it didn't help either.
public static String getPrograms() {
StringWriter sw = new StringWriter();
try {
ProcessBuilder processBuilder = new ProcessBuilder(getCommand().split(" "));
Process process = processBuilder.redirectErrorStream(true).start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
reader.transferTo(sw);
} catch (Exception e) {
e.printStackTrace();
}
return sw.toString();
}
Command:
time java InstalledPrograms
Output:
a2ps install aapt install accountsservice install acl install acpi install acpi-fakekey install ... zathura install zathura-pdf-poppler install zenity install zenity-common install zip install zlib1g:amd64 install zlib1g:i386 install zlib1g-dev:amd64 install zoom install zsh install zsh-common install real 0m0.228s user 0m0.286s sys 0m0.086s