----- Original Message ----- > From: "Ron Pressler" <[email protected]> > To: "Remi Forax" <[email protected]> > Cc: "cay horstmann" <[email protected]>, "core-libs-dev" > <[email protected]>, "David Alayachew" > <[email protected]> > Sent: Monday, April 14, 2025 11:46:25 PM > Subject: Re: [External] : Re: My experience using Java to do CLI Scripting
>> On 14 Apr 2025, at 21:48, Remi Forax <[email protected]> wrote: >> >> >> Hi Ron, >> i think you need to close the inputReader >> >> public static String output(String... args) { >> ProcessBuilder processBuilder = new ProcessBuilder(args); >> try { >> Process process = processBuilder.start(); >> try (BufferedReader reader = process.inputReader()) { >> return reader.lines().collect(Collectors.joining("\n")); >> } >> } catch (IOException e) { >> throw new IOError(e); >> } >> } > > > When the process terminates, the InputStream underlying the pipe is closed > (after being drained and the unread bytes served by a ByteArrayInputStream), > which *I think* should be sufficient, but I could be wrong. I more worried about the iterator used by lines() throwing an exception (IO or charset related) or joining() throwing an OOME because in that case the reader may not be closed. > > — Ron regards, Rémi
