stream流批量删除
时间: 2023-10-30 17:06:50 浏览: 102
使用Stream流进行批量删除文件或文件夹的方法相对较新,但也非常简单。你可以使用Files.walk方法遍历文件夹(包括子文件夹和子文件),然后对每一个遍历出来的结果进行处理,调用Files.delete方法进行删除操作。下面是一个示例代码:
```
Path path = Paths.get("D:\\data\\test1\\test2");
try (Stream<Path> walk = Files.walk(path)) {
walk.sorted(Comparator.reverseOrder())
.forEach(DeleteFileDir::deleteDirectoryStream);
}
private static void deleteDirectoryStream(Path path) {
try {
Files.delete(path);
System.out.printf("删除文件成功:%s%n", path.toString());
} catch (IOException e) {
System.err.printf("无法删除的路径 %s%n%s", path, e);
}
}
```
这段代码使用Files.walk方法遍历了"D:\\data\\test1\\test2"目录下的所有文件和文件夹,并按照相反的顺序进行处理。在forEach方法中,调用了deleteDirectoryStream方法来删除每一个文件或文件夹。
相关问题
springboot项目批量删除的多种相关代码
1. 手动遍历删除
这种方法比较原始,就是遍历符合条件的所有对象,然后一个一个删除。虽然代码简单易懂,但是性能较差,有可能会出现内存溢出的问题。
```java
List<Student> students = studentRepository.findByGrade(2019);
for (Student student : students) {
studentRepository.delete(student);
}
```
2. JPA的deleteAllInBatch方法
这种方法可以一次性删除符合条件的所有对象,而不需要一个个遍历。性能比较好,代码简洁。
```java
studentRepository.deleteAllInBatch(studentRepository.findByGrade(2019));
```
3. JPQL的delete语句
这种方法可以直接使用JPQL的delete语句来删除符合条件的所有对象,性能也很高。不过需要注意的是,如果需要级联删除,需要手动设置级联删除。
```java
@Modifying
@Query("delete from Student s where s.grade = ?1")
void deleteByGrade(int grade);
```
4. Spring Data JPA的@Query注解
这种方法相当于是前面两种方法的综合,使用@Query注解定义JPQL语句,并在接口中定义删除方法。性能较好,代码简洁。
```java
@Modifying
@Query("delete from Student s where s.grade = ?1")
void deleteByGrade(int grade);
```
5. Apache Common的CollectionUtils工具类
这种方法是使用Apache Common的CollectionUtils工具类,类似于Java8的stream流操作,使用lambda表达式来一次性删除符合条件的对象。代码简洁,性能较好。
```java
List<Student> students = studentRepository.findByGrade(2019);
CollectionUtils.filter(students, student -> student.getAge() > 20);
studentRepository.deleteAll(students);
```
阅读全文