需求:
爬取某个网站的商品信息存在一个商品文件目录中,每个子商品信息文件夹中都有一个 `goods.txt` 文件 文件,现在不需要了,需要删除它。为了提升操作效率,使用了多线程处理。代码示例
public static void main(String[] args) {// 设定目标目录路径String targetDirPath = "E:/software/test/toiletrie/";File targetDir = new File(targetDirPath);// 检查目标目录是否存在且是一个目录if (targetDir.exists() && targetDir.isDirectory()) {// 获取目标目录下的所有子文件和子目录File[] subFiles = targetDir.listFiles();if (subFiles != null) {// 创建一个固定大小的线程池ExecutorService executorService = Executors.newFixedThreadPool(10);for (File subFile : subFiles) {// 对每个子目录创建一个任务进行处理executorService.submit(() -> {if (subFile.isDirectory()) {File goodsTxt = new File(subFile, "goods.txt");if (goodsTxt.exists() && goodsTxt.isFile()) {if (goodsTxt.delete()) {System.out.println(goodsTxt.getAbsolutePath() + " 删除成功!");} else {System.out.println(goodsTxt.getAbsolutePath() + " 删除失败!");}}}});}// 关闭线程池,不再接受新任务executorService.shutdown();try {// 等待所有任务完成executorService.awaitTermination(1, TimeUnit.HOURS);} catch (InterruptedException e) {System.err.println("线程池等待中断:" + e.getMessage());}}} else {System.out.println("目标目录不存在或不是一个目录!");}
}
-
设定目标目录
指定目录路径
targetDirPath
。 -
检查目录
使用targetDir.exists()
和targetDir.isDirectory()
确保目录存在且是一个有效的目录。 -
获取子文件/子目录
使用listFiles()
获取目录下的所有文件和子目录。 -
线程池并发处理
创建一个大小为 10 的固定线程池,最多可以有 10 个线程同时执行删除操作。 -
处理每个子目录
在每个子目录中,检查是否存在goods.txt
文件,如果存在则删除。 -
关闭线程池并等待任务完成
executorService.shutdown()
:关闭线程池,停止接收新的任务。
awaitTermination()
: 等待所有任务在指定时间内完成。超过一小时未完成抛出异常