对于我所拥有的独特测试场景,我需要能够在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
除了这两个选项之外,还有哪些更简单的解决方案我都缺席了?
答案 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
库将存储库克隆到文件系统中,然后以正常方式遍历工作目录 - 因为它只是一个常规目录。