java將多個檔案的位元組陣列壓縮成一個位元組陣列,並生成zip檔案
阿新 • • 發佈:2021-08-17
public static void main(String[] args) throws IOException { Map<String,byte[]> map=new HashMap<>(); map.put("application.properties",getBytes(new File("F:\\shop-mail2\\shop-apigateway\\src\\main\\resources\\application.properties"))); map.put("application.yml",getBytes(newFile("F:\\shop-mail2\\shop-apigateway\\src\\main\\resources\\application.yml"))); System.out.println(listBytesToZip(map).length); String filepath="F:\\test\\"; String filename="test.zip"; fileToBytes(listBytesToZip(map),filepath,filename); } protected staticbyte[] listBytesToZip(Map<String,byte[]> mapReporte) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStream zos = new ZipOutputStream(baos); for (Map.Entry<String,byte[]> reporte : mapReporte.entrySet()) { ZipEntry entry= new ZipEntry(reporte.getKey()); entry.setSize(reporte.getValue().length); zos.putNextEntry(entry); zos.write(reporte.getValue()); } zos.closeEntry(); zos.close(); return baos.toByteArray(); } private static byte[] getBytes(File file) throws IOException { FileInputStream fis=new FileInputStream(file); ByteArrayOutputStream bao=new ByteArrayOutputStream(); byte[] b=new byte[1024]; int len=-1; while ((len=fis.read(b))!=-1){ bao.write(b,0,len); } return bao.toByteArray(); } public static void fileToBytes(byte[] bytes, String filePath, String fileName) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file = null; try { file = new File(filePath + fileName); if (!file.getParentFile().exists()){ //資料夾不存在 生成 file.getParentFile().mkdirs(); } fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(bytes); } catch (Exception e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }