Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ch.claude_martin.foo;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.nio.charset.Charset;
- import java.util.ArrayList;
- import java.util.List;
- public class SomeClass {
- public static void main(String[] args) throws InterruptedException {
- try {
- // The old CMD on Windows uses UTF-16:
- var utf16 = Charset.forName("UTF-16LE");
- System.out.println(execute("cmd /U /C echo hello", utf16));
- // Linux usually has UTF-8 as the default encoding:
- var utf8 = Charset.forName("UTF-8");
- // using WSL we can easily access the Linux subsystem:
- System.out.println(execute("wsl echo hello", utf8));
- // You get a List. Use .get(0) to get the first line:
- System.out.println(execute("wsl uname -a", utf8).get(0));
- // This only works when Windows is installed on C:\
- System.out.println(execute("wsl ls /mnt/c/Users", utf8));
- // But you can combine CMD and WSL to make sure you get the correct paths:
- var home = execute("cmd /U /C echo %USERPROFILE%", utf16).get(0);
- System.out.println(execute(String.format("wsl wslpath '%s'", home), utf8));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * Run given command and return the data read from stdout.
- *
- * @param cmd the command, for example "cmd /U /C echo foo"
- * @return The output of the command as a List of Strings.
- * @throws IOException Thrown when executing the command or reading the data
- * fails.
- */
- public static List<String> execute(final String cmd, Charset encoding) throws IOException {
- Process p = null;
- try {
- p = Runtime.getRuntime().exec(cmd);
- try (var br = new BufferedReader(new InputStreamReader(p.getInputStream(), encoding))) {
- List<String> result = new ArrayList<>();
- for (;;) {
- String line = br.readLine();
- if (line == null)
- break;
- result.add(line);
- }
- return result;
- }
- } finally {
- if (p != null)
- p.destroy();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement