【问题标题】:Java set of path pretty output in console控制台中的 Java 路径漂亮输出集
【发布时间】:2020-04-04 11:59:12
【问题描述】:

请在 Java 中提出好的解决方案,如何在 java.nio.file.Path 的控制台集中漂亮地打印。 例如: 路径:

/src/test/resources/TestFolder/Wave.java
/src/test/resources/TestFolder 
/src/test/resources/TestFolder/Mello.java 
/src/test/resources/TestFolder/TestFolder2/Dave2.java 
/src/test/resources/TestFolder/TestFolder2/Hello2.java 
/src/test/resources/TestFolder/TestFolder2

预期结果:

TestFolder 
   Wave.java
   Mello.java 
   TestFolder2 
      Dave2.java 
      Hello2.java 

【问题讨论】:

    标签: java path set output


    【解决方案1】:

    没有内置的 API 调用可以做到这一点。幸运的是,Java 是一种编程语言,而您是一名程序员。让我们编程吧! :)

    您需要的工具:

    相对化或获取文件名

    您可以使用relativize 调用来生成相对于“根点”的路径。例如:

    Paths.get("/src/test/resources").relativize(Paths.get("/src/test/resources/TestFolder/Mello.java"))
    

    变成表示:TestFolder/Mello.java的路径。

    但是,也许您希望输出中的每个条目始终只是一个文件名;在这种情况下,getFileName() 调用会去除除最后一个之外的所有路径元素:Paths.get("/src/test/resources/TestFolder/TestFolder2/Hello2.java").getFileName() 生成仅包含 Hello2.java 的路径(如果您需要将其作为字符串,只需在路径对象上调用 toString() 即可获得该路径)。

    字符串生成器

    StringBuilder 类可用于逐段生成更长的字符串。

    重复

    如果您有一个表示“嵌套级别”的 int,则在您的示例中,您希望文件名前面有一堆空格,等于它的某个倍数。您可以使用 repeat 调用将数字转换为包含该数量空格的字符串:String prefix = " ".repeat(5); 生成包含 10 个空格的字符串。

    注意:这是一个较新的 API;如果您使用的是旧版本的 java 并且此调用不起作用,则必须自己编写。这只是一个 for 循环。

    Files.isDirectory

    ​​>

    要知道任何给定文件是否是目录,您可以调用它;如果是则返回 true,否则返回 false。

    Files.newDirectoryStream

    这是“遍历”文件系统的一种方法:这使您可以列出给定目录中的每个目录/文件:

    Path somePathObject = Paths.get("/foo/bar");
    try (var contents = Files.newDirectoryStream(somePathObject)) {
        for (Path content : contents) {
            .. this is called once for each file/dir in '/foo/bar'
        }
    }
    

    递归

    最后,将它们联系在一起:您希望在给定起点遍历每个子节点,如果它是一个文件,则打印与我们的嵌套级别(从 0 开始)相等的间隔数,然后简单的文件名,然后继续下一个条目。对于目录条目,您希望这样做,然后“潜入”目录,增加嵌套级别。如果将嵌套级别作为参数,则可以调用自己的方法,将目录用作新的“根点”,并为嵌套级别传递“嵌套级别 + 1”。

    祝你好运,玩得开心!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2015-11-29
      • 2011-02-20
      • 2014-12-13
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多