根据 java 中的正则表达式过滤子目录
Filter subdirectories based on regex in java
我的目录结构如下:
/test_directory/data/date=2021-01-01/
/test_directory/data/date=2021-01-02/
/test_directory/data/date=2021-01-03/
/test_directory/data/sample=2021-01-04/
/test_directory/data/sample=2021-01-05/
我只想过滤日期文件夹。
/test_directory/data/date=2021-01-01/
/test_directory/data/date=2021-01-02/
/test_directory/data/date=2021-01-03/
我厌倦了下面的代码:但是无法将正则表达式保留在目录路径中。
String dir = "/test_directory/data/";
File[] directories = new File(dir).listFiles(File::isDirectory);
for(int i=0;i< directories.length;i++){
System.out.println(directories[i]);
}
首先,让我们迁移到 nio
API,这是为了取代 Java 1.7 以来的 File
API。
String dir = "/test_directory/data/";
Files.list(Paths.get(dir))
.filter(Files::isDirectory)
.forEach(directory -> {
System.out.println(directory.toString());
};
此时,由于您有一个 Stream
,您可以轻松地添加一个额外的过滤器。这可以是基于正则表达式的,也可以只是一个简单的 String.startsWith
.
String dir = "/test_directory/data/";
Files.list(Paths.get(dir))
.filter(Files::isDirectory)
.filter(directory -> directory.getFileName().toString().startsWith("date"))
.forEach(directory -> {
System.out.println(directory.toString());
};
使用File
API,不能有多个滤镜,需要自己组合。
String dir = "/test_directory/data/";
File[] directories = new File(dir).listFiles(
directory -> directory.isDirectory()
&& directory.getName().startsWith("date"));
for (File directory : directories) {
System.out.println(directory.getPath());
}
我的目录结构如下:
/test_directory/data/date=2021-01-01/
/test_directory/data/date=2021-01-02/
/test_directory/data/date=2021-01-03/
/test_directory/data/sample=2021-01-04/
/test_directory/data/sample=2021-01-05/
我只想过滤日期文件夹。
/test_directory/data/date=2021-01-01/
/test_directory/data/date=2021-01-02/
/test_directory/data/date=2021-01-03/
我厌倦了下面的代码:但是无法将正则表达式保留在目录路径中。
String dir = "/test_directory/data/";
File[] directories = new File(dir).listFiles(File::isDirectory);
for(int i=0;i< directories.length;i++){
System.out.println(directories[i]);
}
首先,让我们迁移到 nio
API,这是为了取代 Java 1.7 以来的 File
API。
String dir = "/test_directory/data/";
Files.list(Paths.get(dir))
.filter(Files::isDirectory)
.forEach(directory -> {
System.out.println(directory.toString());
};
此时,由于您有一个 Stream
,您可以轻松地添加一个额外的过滤器。这可以是基于正则表达式的,也可以只是一个简单的 String.startsWith
.
String dir = "/test_directory/data/";
Files.list(Paths.get(dir))
.filter(Files::isDirectory)
.filter(directory -> directory.getFileName().toString().startsWith("date"))
.forEach(directory -> {
System.out.println(directory.toString());
};
使用File
API,不能有多个滤镜,需要自己组合。
String dir = "/test_directory/data/";
File[] directories = new File(dir).listFiles(
directory -> directory.isDirectory()
&& directory.getName().startsWith("date"));
for (File directory : directories) {
System.out.println(directory.getPath());
}