如何使用Java在我的目录中向下移动一级?

时间:2018-03-14 18:20:57

标签: java ubuntu-14.04

有没有办法使用Java实现cd */? 在终端上,此命令将我带到第一个子目录。

在寻找解决方案时,我遇到了这个答案: Moving to a directory one level down

但是这会让我在层次结构中达到一个级别。它使用名为getParentFile()的函数。可能是孩子有类似的功能吗?

2 个答案:

答案 0 :(得分:0)

您无法更改Java进程的当前工作目录(我知道),但如果您只需要使用File个对象,则可以执行以下操作:

File dir = new File("/some/start/path");

File[] children = dir.listFiles(file -> file.isDirectory());
if (children.length > 0) {
    /* You may need a different sort order to duplicate the behavior
       of the * glob character, but for example purposes... */
    Arrays.sort(children, Comparator.comparing(File::getName));

    /* Take the first one */
    dir = children[0];
}

System.out.println("New directory is: " + dir.getAbsoluteFile());

或者如果你想使用Streams,这样的事情会完成同样的事情:

Path base = Paths.get("/some/start/path");

try (Stream<Path> items = Files.list(base)) {
    Path found = items
            .filter(Files::isDirectory)
            .sorted()
            .findFirst()
                .orElse(base);

    System.out.println("New directory is: " + found);
}

在Streams案例中,您应该确保使用try-with-resources,否则您将泄漏打开的文件句柄。

答案 1 :(得分:0)

以下是使用较新的Files.newDirectoryStream方法的答案。它与Sean Bright发布的内容基本相同,尽管它在选择第一个文件之前不对文件进行排序。

public class DirWalk {
   public static void main( String[] args ) throws IOException {
      List<Path> subDir = StreamSupport.stream( Files.newDirectoryStream( 
              Paths.get( "." ), f -> Files.isDirectory( f ) ).spliterator(), false )
              .limit(1)
              .collect( Collectors.toList() );

      System.out.println( "First sub-directory found: " + subDir );
   }

}