当前位置: 首页 > 知识库问答 >
问题:

使用JGit Treewalk列出文件和文件夹

南宫浩皛
2023-03-14

我想使用JGit显示头部修订版的所有文件和文件夹的列表。我可以使用 TreeWalk 列出所有文件,但这不会列出文件夹。

以下是我到目前为止的情况:

public class MainClass {

    public static void main(String[] args) throws IOException {
        FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder
                .setGitDir(new File("C:\\temp\\git\\.git")).readEnvironment()
                .findGitDir().build();

        listRepositoryContents(repository);

        repository.close();
    }

    private static void listRepositoryContents(Repository repository) throws IOException {
        Ref head = repository.getRef("HEAD");

        // a RevWalk allows to walk over commits based on some filtering that is defined
        RevWalk walk = new RevWalk(repository);

        RevCommit commit = walk.parseCommit(head.getObjectId());
        RevTree tree = commit.getTree();
        System.out.println("Having tree: " + tree);

        // now use a TreeWalk to iterate over all files in the Tree recursively
        // you can set Filters to narrow down the results if needed
        TreeWalk treeWalk = new TreeWalk(repository);
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        while (treeWalk.next()) {
            System.out.println("found: " + treeWalk.getPathString());
        }
    }
}

共有2个答案

陈扬
2023-03-14

Git不跟踪它们自己的目录。您只能从从Treewalk获取的路径字符串中派生非空目录名。

有关详细说明和可能的解决方法,请参阅Git常见问题解答(搜索“空目录”)。

酆鸿哲
2023-03-14

您需要将recursive设置为false(请参阅文档),然后按如下方式执行

TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.addTree(tree);
treeWalk.setRecursive(false);
while (treeWalk.next()) {
    if (treeWalk.isSubtree()) {
        System.out.println("dir: " + treeWalk.getPathString());
        treeWalk.enterSubtree();
    } else {
        System.out.println("file: " + treeWalk.getPathString());
    }
}
 类似资料:
  • 它可以工作,很酷,但问题是它不能计算正常的文件,如。txt或。png...我知道它写在这个方法中,但idk如何修复它而不破坏其他一切 我可以重做这个方法吗?(此代码不是我的https://stackoverflow.com/a/33438475/13547682)

  • 问题内容: 请给我一个使用php列出目录中所有文件夹,子文件夹,文件的解决方案。我的文件夹结构是这样的: 我想获取每个文件夹内所有文件的列表。 php中有任何shell脚本命令吗? 问题答案:

  • 我是Android系统的新手。我得到了一个应用程序,在其中我列出了所有SD文件和文件夹,包括doc,pdf,xls,jpg等。 如何在Android中以编程方式获取我的SD卡中所有文件夹和文件的文件夹名和文件名? 我正在使用这段代码,但无法获得文件夹名称(根文件夹和子文件夹)。

  • 这可以通过元数据实现吗?当在父文件夹中创建一个新文件/文件夹时,我是否也可以通过编程方式更新父文件夹的元数据,以便说:“嘿,在这个文件夹中有这些特定的文件?”

  • 我正在编写一个程序,将联系人从ERP系统导入到Outlook。不同的电子邮件会收到不同的来自ERP的联系人列表。这里的想法是,在每封电子邮件中,我都有一个公共联系人文件夹,可以被技术用户访问。技术用户可以将联系人写入此文件夹。下面是搜索文件夹的代码: 服务对象的创建如下: 代码适用于Office2010,我从该文件夹获取Id,连接到它并保存联系人。迁移到Office365后,我们找不到公用文件夹。

  • 问题内容: 我如何返回一个包含该文件夹中的所有文件以及子文件夹的文件数组,我的方法仅适用于该文件夹,并且不包括子文件夹。 问题答案: 使用您当前的代码,进行以下调整: