如何使用 Java 获取 GitHub 项目文件夹下所有文件及其原始内容的列表?

How to get list of all files and their raw contents under the GitHub project folder using the Java?

我正在尝试读取 GitHub URL 的特定文件夹下的文件和每个文件的原始内容,但我没有得到正确的响应。

基本上,我想做这样的事情:

  1. 我有一个 public GitHub 项目,其中有一个文件夹 folder1。此 folder1 包含许多文件 XML/JSON

  2. 我想使用指向 folder1 的 link: https://github.com/comapny/project/tree/master/folder1/tempFolder 并获取其内容。

  3. 这个文件夹下有很多文件,我想读取原始数据的内容。

截至目前,我可以请求文件夹下的单个文件及其原始数据,但无法读取文件夹下的文件以及读取所有文件及其内容。

以下是我目前的代码:

import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class TestMain {
    public static void main(String[] args) throws IOException {
        //Read the GitHub files
        final String inputURL = "https://github.com/company/project/tree/master/XML/withData";
        //final String inputURL = "https://raw.githubusercontent.com/company/project/blob/master/XML/withData/myFileName.xml";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = httpClient.execute(new HttpGet(inputURL));
        StatusLine statusLine = response.getStatusLine();
        String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
        System.out.println("Response Code : " + statusLine.getStatusCode() + " ---- " + "Response Phrase :  " + statusLine.getReasonPhrase());
        System.out.println("Response body: " + responseBody);
    }
}

您可以使用 GitHub's repository content API 列出目录中的文件以及读取文件内容。

例如,列出名为“XML”的目录中的文件可能如下所示:

https://api.github.com/repos/company/project/contents/XML/

响应将是目录中的一组项目。每个项目都包含 属性 type,它让您知道该项目是文件还是目录,以及 url,一个 link 来请求该项目。

通过对项目的 URL 执行新请求,您可以通过其 content 属性 访问文件的内容,或者如果它是一个目录,您可以访问里面的另一个文件数组。