You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java代码从Git仓库(含GitHub)下载文件到本地

Java 实现GitHub文件下载的可用方案及操作步骤

有两种成熟的实现方式,可以根据你的使用场景选择:

方案1:JDK 自带HttpClient实现(无需额外依赖)

适合仅需偶尔下载单个文件、不想引入第三方依赖的场景,直接请求GitHub文件的Raw地址即可。

操作步骤:

  • 首先获取目标文件的Raw地址:在GitHub对应文件页面点击右上角「Raw」按钮,复制跳转后的地址,格式为https://raw.githubusercontent.com/{用户名}/{仓库名}/{分支名}/{文件路径}
  • 发送GET请求获取文件流,直接写入本地路径即可

代码示例:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Paths;

public class GithubFileDownloader {
    public static void main(String[] args) throws Exception {
        // 替换为实际的目标文件Raw地址
        String rawFileUrl = "https://raw.githubusercontent.com/octocat/Hello-World/master/README";
        // 替换为本地存储的完整路径
        String localSavePath = "/your/local/path/README.md";
        
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
                .uri(URI.create(rawFileUrl));
        // 如果下载私有仓库文件,需要添加鉴权头,替换为自己的GitHub Personal Access Token
        // requestBuilder.header("Authorization", "token ghp_你的AccessToken字符串");
        
        HttpResponse<java.nio.file.Path> response = client.send(
                requestBuilder.build(),
                HttpResponse.BodyHandlers.ofFile(Paths.get(localSavePath))
        );
        
        if (response.statusCode() == 200) {
            System.out.println("文件下载成功,存储路径:" + localSavePath);
        } else {
            System.out.println("下载失败,响应状态码:" + response.statusCode());
        }
    }
}

注意:JDK 11及以上版本才自带java.net.http.HttpClient,如果是更低版本的JDK,可以用HttpURLConnection实现相同逻辑。

方案2:使用第三方GitHub SDK实现(适合复杂场景)

如果需要批量下载文件、遍历仓库目录、频繁调用GitHub接口,推荐使用成熟的第三方SDKorg.kohsuke:github-api,省去自己处理鉴权、请求解析、频率限制的成本。

操作步骤:

  • 首先引入依赖,Maven配置如下:
<dependency>
    <groupId>org.kohsuke</groupId>
    <artifactId>github-api</artifactId>
    <version>1.318</version> <!-- 可替换为最新发布版本 -->
</dependency>
  • 调用SDK接口获取文件内容,写入本地即可

代码示例:

import org.kohsuke.github.GHContent;
import org.kohsuke.github.GitHub;
import org.kohsuke.github.GitHubBuilder;
import java.io.FileOutputStream;
import java.io.InputStream;

public class SdkGithubDownloader {
    public static void main(String[] args) throws Exception {
        GitHubBuilder githubBuilder = new GitHubBuilder();
        // 下载私有仓库时需要传入Personal Access Token,公开仓库可省略这行
        // githubBuilder.withOAuthToken("ghp_你的AccessToken字符串");
        GitHub github = githubBuilder.build();
        
        // 获取目标仓库,参数格式为「用户名/仓库名」
        var repository = github.getRepository("octocat/Hello-World");
        // 第一个参数为仓库内的文件路径,第二个参数为分支名
        GHContent content = repository.getFileContent("README", "master");
        
        // 写入本地文件
        try (InputStream inputStream = content.read();
             FileOutputStream outputStream = new FileOutputStream("/your/local/path/README.md")) {
            inputStream.transferTo(outputStream);
        }
        System.out.println("文件下载完成");
    }
}

通用注意事项

  • 不要将Personal Access Token硬编码到代码中,建议通过环境变量、加密配置文件的方式存储,避免权限泄露
  • GitHub公开接口有调用频率限制:未鉴权的请求每小时最多调用60次,带鉴权的请求每小时最多调用5000次,高频调用建议配置鉴权
  • 大文件下载可以在请求头中添加Range参数实现断点续传,避免网络异常导致重复下载全量文件

内容的提问来源于stack exchange,提问作者sekhar reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:45:07