从过程输出中读取二进制和文本

时间:2013-01-17 10:29:43

标签: java git

我正在尝试从Git中检索文件的单个修订版。我做了一些研究,我找到的最好的方法是git show HEAD[x]:[filename],其中[x]是上次修订的修订版,后退,[filename]是文件的名称。我的代码看起来像这样(在Java中):

public static String runProcess2(String executable, String parameter) {
    try {
        Runtime rt = Runtime.getRuntime();
        String path = String.format("%s %s", executable, parameter);
        Process pr = rt.exec(path);

        BufferedReader input = new BufferedReader(new InputStreamReader(
                pr.getInputStream()));

        String line = null;

        StringBuilder sb = new StringBuilder();

        while ((line = input.readLine()) != null) {
            sb.append(line + NL);
        }

        pr.waitFor();
        return sb.toString();

    } catch (Exception e) {
        return null;
    }
}

我使用这行代码运行:

return Utilities.runProcess("git", String.format(
                "--git-dir=%s\\.git --work-tree=%s show HEAD%s:%s", path, path,
                rev, filePath));

这适用于文本文件。但是,存储库中有二进制文件。如果我运行此代码,它会以某种方式破坏文件。 (再次,这适用于文本文件)。如何从存储库中检索二进制文件和文本文件(使用任何内容编码)的文件内容?

我认为用于读取输出的方法不够通用。

0 个答案:

没有答案