给出一个java stream判断压缩包类型的案例,给出反例和正确例子
时间: 2024-09-29 16:16:14 浏览: 38
在Java中,我们可以利用Stream API来过滤和判断文件是否为常见的压缩包类型,如`.zip`, `.rar`, 或 `.gz`。这里是一个简单的例子,假设我们有一个包含文件名字符串列表的集合:
```java
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
List<String> filePaths = Arrays.asList("file.zip", "document.txt", "data.rar", ".gitignore", "folder.gz");
// 使用Java Stream转换流并判断是否为压缩包
List<String> compressedFiles = filePaths.stream()
.filter(path -> {
try {
// 检查文件扩展名是否常见压缩包类型
String fileName = path.substring(path.lastIndexOf(".") + 1);
return Arrays.asList("zip", "rar", "gz").contains(fileName.toLowerCase());
} catch (Exception e) {
return false; // 如果路径解析失败,视为非压缩包
}
})
.collect(Collectors.toList());
System.out.println("Compressed files: " + compressedFiles);
// 反例:错误地检查文件内容而非扩展名
// 这里尝试读取文件内容来判断压缩与否,这不是一个好的实践,因为这需要I/O操作,并且不适用于大多数情况
// List<String> wrongFilteredFiles = filePaths.stream()
// .filter(path -> Files.readString(Path.of(path)).startsWith("PK")) // 错误示例:仅检查ZIP的特定头
// .collect(Collectors.toList()); // 这不会正常工作
阅读全文