Java如何批量读取文件夹内图片并生成二维字节数组
实现方案
你可以按以下步骤实现需求:
- 先遍历目标文件夹过滤出所有图片文件
- 封装单文件转字节数组的通用逻辑,建议用JDK自带的
Files.readAllBytes简化流操作,避免手动关流漏处理异常的问题 - 用动态列表先存储读取到的单图字节数组,最后转成你需要的二维字节数组结构
完整实现代码
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; public class ReadAllImages { public static void main(String[] args) throws IOException { // 1. 指定图片文件夹路径 File imgDir = new File("D:\\swim"); List<byte[]> imgByteList = new ArrayList<>(); // 2. 遍历文件夹过滤图片文件,可根据需要调整支持的后缀 File[] imgFiles = imgDir.listFiles(file -> { String fileName = file.getName().toLowerCase(); return fileName.endsWith(".png") || fileName.endsWith(".jpg") || fileName.endsWith(".jpeg"); }); if (imgFiles == null) { throw new RuntimeException("目标文件夹不存在或不是有效目录"); } // 3. 逐个读取图片存为字节数组 for (File imgFile : imgFiles) { byte[] imgBytes = Files.readAllBytes(imgFile.toPath()); imgByteList.add(imgBytes); } // 4. 转成你需要的二维字节数组结构 A[图片序号][对应图片字节数组] byte[][] result = imgByteList.toArray(new byte[0][]); // 测试输出:打印第1张图片的字节数组 // System.out.println(Arrays.toString(result[0])); } }
说明
- 二维数组
result的第一维下标就是图片序号,从0开始,顺序和文件夹遍历的文件顺序一致 - 如果你需要固定的排序规则,可以对
imgFiles数组先做排序处理再读取 - 单张图片大小如果超过2GB(int最大值)会存在长度精度问题,普通场景下无需考虑
内容的提问来源于stack exchange,提问作者Saso
相关产品推荐
相关产品推荐

