如何使用 Java 在我的目录中向下移动一级?
How can I move down by one level in my directory using Java?
有没有办法使用 Java 来实现 cd */
?
在终端上,此命令将我带到第一个子目录。
在寻找解决方案时,我遇到了这个答案:
Moving to a directory one level down
但这让我在层次结构中上升了一个层次。它使用一个名为 getParentFile()
的函数。 child有类似的功能吗?
您不能更改 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,否则您将泄漏打开的文件句柄。
这是使用较新的 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 );
}
}
有没有办法使用 Java 来实现 cd */
?
在终端上,此命令将我带到第一个子目录。
在寻找解决方案时,我遇到了这个答案: Moving to a directory one level down
但这让我在层次结构中上升了一个层次。它使用一个名为 getParentFile()
的函数。 child有类似的功能吗?
您不能更改 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,否则您将泄漏打开的文件句柄。
这是使用较新的 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 );
}
}