Java控制台中的路径漂亮输出集

问题描述 投票:1回答:1

[请提出一个好的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个回答
3
投票

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

您需要的工具:

相对化,或getFileName

您可以使用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(如果需要它作为字符串,只需在path对象上调用toString()即可得到) )。

StringBuilder

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

重复

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

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

Files.isDirectory

要知道给定的文件是否为目录,可以调用该目录;如果为true,则返回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开始)的间隔符,然后简单文件名,然后转到下一个条目。对于目录条目,您要这样做,然后“潜入”目录,从而增加嵌套级别。如果将嵌套级别作为参数,则可以调用自己的方法,将目录用作新的“根点”,并为嵌套级别传递“ nestingLevel + 1”。

祝你好运,玩得开心!

© www.soinside.com 2019 - 2024. All rights reserved.