在Java中读取GitHub项目的目录结构

时间:2013-12-19 22:31:07

标签: java github

对于我所拥有的独特测试场景,我需要能够在Java中读取给定Github项目(公共项目)的目录结构。换句话说,给定一个GitHub项目URL,我的程序应该能够读取/src/main/java下的Java文件。

选项1:直接从下面的URL中读取html并解析某些令牌是一种选择,但它太脆弱和痛苦。

https://github.com/testuser/testproject/tree/master/src/main/java

选项2:将项目下载为zip文件并使用Java ZipInputStream进行处理。

https://github.com/testuser/testproject/archive/master.zip

除了这两个选项之外,还有哪些更简单的解决方案我都缺席了?

2 个答案:

答案 0 :(得分:1)

由于我无法使Java GitHub库工作,我决定解析源zip文件以获得我想要的内容。

    String githubZip = "https://github.com/testuser/testproject/archive/master.zip"

    ZipInputStream zipInputStream = null
    def javaFiles = [:]
    try {
        zipInputStream = new ZipInputStream(new URL(githubZip).openStream());
        ZipEntry zipEntry;

        while( (zipEntry = zipInputStream.getNextEntry())!=null ) {
            if(!zipEntry.isDirectory() && zipEntry.getName().endsWith("java")){
                StringWriter stringWriter = new StringWriter()
                IOUtils.copy(zipInputStream, stringWriter)
                def fileContent = stringWriter.toString();

                javaFiles[zipEntry.getName()] = fileContent
                stringWriter.close()
            }
        }
    } catch (Exception e){
        e.printStackTrace()
    } finally {
        zipInputStream.close()
    }

答案 1 :(得分:0)

使用JGit库将存储库克隆到文件系统中,然后以正常方式遍历工作目录 - 因为它只是一个常规目录。