如何使用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
相关产品推荐
相关产品推荐

