代码如下:
本次数据库为sqlserve
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DataBaseName=cs", "sa", "Zmy123456."); String sql = "select ATFile,ATFileName from AT_AttachmentFile where ATGuid = 'A1:05c5bf44-2323-48ec-8f23-0f6623ee7fcd'"; PreparedStatement ps =connection.prepareStatement(sql); ResultSet rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); Map<String, Object> mapMetaData = new HashMap<>(); ZipFile zipFile = null; Stream<? extends ZipEntry> signStream = null; Stream<? extends ZipEntry> zipStream = null; while (rs.next()) { String columnLabel = rsmd.getColumnLabel(1); Blob columnValue = rs.getBlob(columnLabel); InputStream ins= columnValue.getBinaryStream(); File file = new File("D:\\","cs.zip"); org.apache.commons.io.FileUtils.copyInputStreamToFile(ins, file); zipFile = new ZipFile(file, Charset.defaultCharset()); signStream = zipFile.stream(); zipStream = zipFile.stream(); //断言 Predicate<ZipEntry> signTxt = ze -> ze.getName().contains("sign,txt"); Predicate<ZipEntry> zipTxt = ze -> ze.getName().endsWith(".zip"); //,过滤 Optional<ZipEntry> signInfo = (Optional<ZipEntry>) signStream.filter(signTxt).findFirst(); Optional<ZipEntry> zipInfo = (Optional<ZipEntry>) zipStream.filter(zipTxt).findFirst(); ins.close(); zipFile.close(); //获取文件名称 String fileName = rsmd.getColumnLabel(2); Object fileNames = rs.getObject(fileName); String zipDir = "D:\\"; //解压zip文件 String name = ZipUtils.unzip(file.getPath(),zipDir); file.delete(); //读成byte数组返回 byte[] bytes = FileUtil.readFile2Bytes(new File(zipDir+File.separator+name),true); System.out.println(bytes); } //将字符串写入到zip中如下// File file = new File("D:\\","cs.zip");// java.util.zip.ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(file));// mapMetaData.forEach((k,v)->{// try {// zipOutputStream.putNextEntry(new ZipEntry("15.pdf"));// IoUtil.write(zipOutputStream,false, (byte[]) v);// zipOutputStream.flush();// zipOutputStream.closeEntry();// } catch (IOException e) {// e.printStackTrace();// }// }); } catch (Exception e) { e.printStackTrace(); }
解压文件办法unzip
//解压zip文件 public static String unzip(String filePath,String zipDir){ String name = null; BufferedOutputStream des = null; BufferedInputStream is =null; ZipFile zipFile = null; try { ZipEntry entry; zipFile = new ZipFile(filePath); Enumeration dir = zipFile.entries(); while (dir.hasMoreElements()){ entry = (ZipEntry) dir.nextElement(); if (entry != null){ name = entry.getName(); } } Enumeration e = zipFile.entries(); while (e.hasMoreElements()){ entry = (ZipEntry) e.nextElement(); if (entry.isDirectory()){ continue; }else { is = new BufferedInputStream(zipFile.getInputStream(entry)); int count; byte[] bytes = new byte[2048]; FileOutputStream fos = new FileOutputStream(zipDir+entry.getName()); des = new BufferedOutputStream(fos,2048); while ((count = is.read(bytes,0,2048)) !=-1){ des.write(bytes,0,count); } } } return name; } catch (IOException e) { e.printStackTrace(); }finally { try { zipFile.close(); des.flush(); des.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } return name; };
读成byte数组
public static byte[] readFile2Bytes(File file, boolean isDelete) throws IOException { InputStream inputStream = new FileInputStream(file); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { int len = 0; byte[] b = new byte[10240]; while ((len = inputStream.read(b)) != -1) { outputStream.write(b, 0, len); } byte[] byteArray = outputStream.toByteArray(); return byteArray; } finally { IOUtils.close(inputStream); IOUtils.close(outputStream); if (isDelete) { file.delete(); } } }