【github】使用java下载github指定用户下的所有仓库

1.实现流程

1.获取用户的所有仓库信息
2.正则匹配拼接 clone地址
3.将生成的命令放在cmd执行,将结果存在本机

2.代码,复制即用

package com.github.generatecode.test;

import com.github.generatecode.model.MatchKeywordStartToEnd;
import com.github.generatecode.util.RegexMatches;
import com.github.generatecode.util.StringUtils;
import jdk.nashorn.internal.ir.LiteralNode;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author : Mr huangye
 * @URL : CSDN 皇夜_
 * @createTime : 2021/4/15 23:41
 * @Description : 从某个文件中匹配clone地址出来
 */
public class TestCloneUrl {

    public static void main(String[] args) {
        //1.获取github用户下的所有仓库信息
        String exec = exec("curl \"https://api.github.com/users/a982338665/repos?per_page=100\" >xxx2.txt");
        //2.通过正则匹配获取到clone地址并打印
        printGitCloneCMD(exec);
        //3.打开cmd窗口在指定的文件夹下 执行以上clone命令
    }
    /**
     * 打印git clone命令
     */
    public static void printGitCloneCMD(String text) {
        StringBuilder listsre = new StringBuilder();
        List<MatchKeywordStartToEnd> list = matchKeywordStartToEnd("\"clone_url\": \"", "\"", text);
        list.forEach(e -> {
            listsre.append("git clone --depth=1 " + e.getKeyword() + "\n");
        });
        System.err.println(listsre.toString());
    }

    public static String exec(String cmd) {
        try {
            Process process = Runtime.getRuntime().exec(cmd);
            InputStream is = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "GBK");
            BufferedReader br = new BufferedReader(isr);
            StringBuilder stringBuilder = new StringBuilder();
            String content = br.readLine();
            while (content != null) {
//                System.out.println(content);
                stringBuilder.append(content);
                content = br.readLine();
            }
            return stringBuilder.toString();
//            System.err.println(stringBuilder.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static List<MatchKeywordStartToEnd> matchKeywordStartToEnd(String start, String end, String text) {
        List<MatchKeywordStartToEnd> list = new ArrayList<>();
        String regex = getRegex(start, end);
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(text); // 获取 matcher 对象
        while (m.find()) {
            String str = text.substring(m.start(), m.end());
            //(?<scope>.*?)是用于标识scope的方式,表示夹在中间的字符串都叫scope,可以通过matcher.group("scope")提取。
            //[\\s\\S]*? 是用来匹配任意字符,表示在前后有界定的情况下(例如夹在<xxx></xxx>中间的字符串),可以忽略那些不规则字符串的匹配。
            list.add(new MatchKeywordStartToEnd(m.start(), m.end(), m.group("scope"), str));
        }
        return list;
    }

    public static String getRegex(String start, String end) {
//        return StringUtils.concat("\\",start,"(?<scope>.*?)", end);           //不支持跨行匹配
        return StringUtils.concat("\\", start, "(?<scope>[\\s\\S]*?)", end);      //支持跨行匹配
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇夜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值