使用processBuilder打开git bash,并在其中执行命令。

问题描述 投票:2回答:1

是否可以在java中使用类似ProcessBuilder的东西来打开gitbash,写一条命令(例如git status)并输出结果?

我可以用下面的代码成功打开git bash,但我不知道如何在里面写任何命令。

String[] commands = {"cmd","/C","C:\\Users\\......\\Git\git-bash"};
ProcessBuilder builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();

StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try
{
   br=new BufferedReader(new InputStreamReader(process.getInputStream()));
   String line = null;
   while ((line = br.readLine()) != null) {
      sb.append(line + System.getProperty("line.seperator"));
   }
} finally {
 br.close();
}

String outcome = get_output(process.getInputStream());
process.waitFor();
System.out.println("Process finished with outcome = " + outcome);
java cmd process inputstream processbuilder
1个回答
1
投票

你只需要改变路径和git命令就可以了。但是git-bash的输出结果是打印在一个单独的.txt文件上的,因为我无法用其他方式读取。

public class GitBash {

    public static final String path_bash = "C:/Program Files/Git/git-bash.exe";

    // Create a file Output.txt where git-bash prints the results
    public static final String path_file_output_git_bash =
            "C:/Users/Utente/Documents/IntelliJ-DOC/IntelliJ_project/Prova/src/main/Git-bash/Output.txt";

    public static void main(String[] args) {
        // Path to your repository
        String path_repository = "cd C:/Users/Utente/Documents/Repository-SVN-Git/Bookkeeper";
        // Git command you want to run
        String git_command = "git ls-files | grep .java | wc -l";

        String command = path_repository + " && " + git_command + " > " + path_file_output_git_bash;

        runCommand(command);
    }

    public static void runCommand(String command) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder();
            processBuilder.command(path_bash, "-c", command);

            Process process = processBuilder.start();

            int exitVal = process.waitFor();
            if (exitVal == 0) {
                System.out.println(" --- Command run successfully");
                System.out.println(" --- Output = " + readFileTxt());

            } else {
                System.out.println(" --- Command run unsuccessfully");
            }
        } catch (IOException | InterruptedException e) {
            System.out.println(" --- Interruption in RunCommand: " + e);
            // Restore interrupted state
            Thread.currentThread().interrupt();
        }
    }

    public static String readFileTxt() {
        String data = null;
        try {
            File myObj = new File(path_file_output_git_bash);
            Scanner myReader = new Scanner(myObj);
            while (myReader.hasNextLine()) {
                data = myReader.nextLine();
            }
            myReader.close();
        } catch (FileNotFoundException e) {
            System.out.println(" --- An error occurred");
            e.printStackTrace();
            }
            return data;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.