Exemple #1
0
 /**
  * 将文件压缩到ZIP输出流
  *
  * @param dirPath 目录路径
  * @param file 文件
  * @param zouts 输出流
  */
 public static void zipFilesToZipFile(String dirPath, File file, ZipOutputStream zouts) {
   FileInputStream fin = null;
   ZipEntry entry = null;
   // 创建复制缓冲区
   byte[] buf = new byte[4096];
   int readByte = 0;
   if (file.isFile()) {
     try {
       // 创建一个文件输入流
       fin = new FileInputStream(file);
       // 创建一个ZipEntry
       entry = new ZipEntry(getEntryName(dirPath, file));
       // 存储信息到压缩文件
       zouts.putNextEntry(entry);
       // 复制字节到压缩文件
       while ((readByte = fin.read(buf)) != -1) {
         zouts.write(buf, 0, readByte);
       }
       zouts.closeEntry();
       fin.close();
       System.out.println("添加文件 " + file.getAbsolutePath() + " 到zip文件中!");
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 }
Exemple #2
0
  public void writeblob() throws IOException {

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream("c://test2.zip"));

    File f = new File("c://abc.doc");
    FileInputStream in = new FileInputStream(f);
    byte a[] = null; // **将测试文件读入此字节数组
    int flength = (int) f.length(); // **读入文件的字节长度
    System.out.println("file length::" + flength);
    a = new byte[flength];

    int i = 0;
    int itotal = 0;
    // 将文件读入字节数组
    for (; itotal < flength; itotal = i + itotal) {

      // in.read

      i = in.read(a, itotal, flength - itotal);
    }
    out.putNextEntry(new org.apache.tools.zip.ZipEntry("test2"));
    out.write(a);
    in.close();
    out.close();
  }
Exemple #3
0
  /**
   * 将目录压缩到ZIP输出流
   *
   * @param dirPath 目录路径
   * @param fileDir 文件信息
   * @param zouts 输出流
   */
  public static void zipDirectoryToZipFile(String dirPath, File fileDir, ZipOutputStream zouts) {
    if (fileDir.isDirectory()) {
      File[] files = fileDir.listFiles();
      // 空的文件夹
      if (files.length == 0) {
        // 目录信息
        ZipEntry entry = new ZipEntry(getEntryName(dirPath, fileDir));
        try {
          zouts.putNextEntry(entry);
          zouts.closeEntry();
        } catch (Exception e) {
          e.printStackTrace();
        }
        return;
      }

      for (File file : files) {
        if (file.isFile()) {
          // 如果是文件,则调用文件压缩方法
          FileUtils.zipFilesToZipFile(dirPath, file, zouts);
        } else {
          // 如果是目录,则递归调用
          FileUtils.zipDirectoryToZipFile(dirPath, file, zouts);
        }
      }
    }
  }
Exemple #4
0
 /**
  * 压缩文件或目录
  *
  * @param srcDirName 压缩的根目录
  * @param fileName 根目录下的待压缩的文件名或文件夹名,其中*或""表示跟目录下的全部文件
  * @param descFileName 目标zip文件
  */
 public static void zipFiles(String srcDirName, String fileName, String descFileName) {
   // 判断目录是否存在
   if (srcDirName == null) {
     log.debug("文件压缩失败,目录 " + srcDirName + " 不存在!");
     return;
   }
   File fileDir = new File(srcDirName);
   if (!fileDir.exists() || !fileDir.isDirectory()) {
     log.debug("文件压缩失败,目录 " + srcDirName + " 不存在!");
     return;
   }
   String dirPath = fileDir.getAbsolutePath();
   File descFile = new File(descFileName);
   try {
     ZipOutputStream zouts = new ZipOutputStream(new FileOutputStream(descFile));
     if ("*".equals(fileName) || "".equals(fileName)) {
       FileUtils.zipDirectoryToZipFile(dirPath, fileDir, zouts);
     } else {
       File file = new File(fileDir, fileName);
       if (file.isFile()) {
         FileUtils.zipFilesToZipFile(dirPath, file, zouts);
       } else {
         FileUtils.zipDirectoryToZipFile(dirPath, file, zouts);
       }
     }
     zouts.close();
     log.debug(descFileName + " 文件压缩成功!");
   } catch (Exception e) {
     log.debug("文件压缩失败:" + e.getMessage());
     e.printStackTrace();
   }
 }
  /**
   * Adds a single file into the ZipOutputStream with specified entry name.
   *
   * @throws IOException
   */
  private void addFileToZip(ZipOutputStream zipOut, UploadedFile file, String name)
      throws IOException {
    if (log.isTraceEnabled()) {
      log.trace(">> addFileToZip(): " + file);
    }

    ZipEntry entry = new ZipEntry(name);
    zipOut.putNextEntry(entry);

    InputStream in = null;
    try {
      in = file.getInputstream();
      FileUtils.copyStream(file.getInputstream(), zipOut);
      zipOut.closeEntry();
    } finally {
      FileUtils.close(in);
    }

    //        try (InputStream in = file.getInputstream()) {
    //            FileUtils.copyStream(file.getInputstream(), zipOut);
    //            zipOut.closeEntry();
    //        }

    if (log.isTraceEnabled()) {
      log.trace("<< addFileToZip()");
    }
  }
Exemple #6
0
  private byte[] zip(ZipOutputStream out, File f, String base) throws Exception {

    //		System.out.println("isDirectory===="+f.isDirectory());
    //		if (f.isDirectory()) {
    //			File[] fl = f.listFiles();
    //			out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));
    //			base = base.length() == 0 ? "" : base + "/";
    //			for (int i = 0; i < fl.length; i++) {
    //				zip(out, fl[i], base + fl[i].getName());
    //			}
    //
    //
    //		} else {
    out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
    FileInputStream in = new FileInputStream(f);

    // ZipInputStream  zis  = new ZipInputStream ();

    /**
     * int b; while ((b = in.read()) != -1) {
     *
     * <p>out.write(b); }
     *
     * <p>in.close();
     */
    byte a[] = null; // **将测试文件读入此字节数组
    int flength = (int) f.length(); // **读入文件的字节长度
    System.out.println("file length::" + flength);
    a = new byte[flength];

    int i = 0;
    int itotal = 0;
    // 将文件读入字节数组
    for (; itotal < flength; itotal = i + itotal) {

      // in.read

      i = in.read(a, itotal, flength - itotal);
    }

    System.out.println("压缩前的数字==" + a.length);
    out.write(a);
    byte[] comby = ZipFile.compressBytes(a);
    System.out.println("压缩后的数字==" + comby.length);

    byte[] decomby = ZipFile.decompressBytes(comby);

    System.out.println("解压缩后的数字==" + decomby.length);
    in.close();
    out.close();

    return a;

    //		}
  }
  /**
   * Adds a single file into the ZipOutputStream with specified entry name.
   *
   * @throws IOException
   */
  private void addFileToZip(ZipOutputStream zipOut, ReshakaUploadedFile file, String name)
      throws IOException {
    if (log.isTraceEnabled()) {
      log.trace(">> addFileToZip(): " + file);
    }

    ZipEntry entry = new ZipEntry(name);
    zipOut.putNextEntry(entry);
    try (InputStream in = file.getInputstream()) {
      FileUtils.copyStream(file.getInputstream(), zipOut);
      zipOut.closeEntry();
    }

    if (log.isTraceEnabled()) {
      log.trace("<< addFileToZip()");
    }
  }
Exemple #8
0
 /**
  * 压缩文件
  *
  * @param srcfile File[] 需要压缩的文件列表
  * @param zipfile File 压缩后的文件
  */
 public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
   byte[] buf = new byte[1024];
   try {
     ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
     for (int i = 0; i < srcfile.length; i++) {
       FileInputStream in = new FileInputStream(srcfile[i]);
       out.putNextEntry(new ZipEntry(srcfile[i].getName()));
       String str = srcfile[i].getName();
       int len;
       while ((len = in.read(buf)) > 0) {
         out.write(buf, 0, len);
       }
       out.closeEntry();
       in.close();
     }
     out.close();
     System.out.println("压缩完成.");
   } catch (IOException e) {
     e.printStackTrace();
   }
 }
Exemple #9
0
 /**
  * zip压缩功能. 压缩baseDir(文件夹目录)下所有文件,包括子目录
  *
  * @throws Exception
  */
 public static void zipFile(String baseDir, String fileName, String comment) throws Exception {
   List fileList = getSubFiles(new File(baseDir));
   ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));
   ZipEntry ze = null;
   byte[] buf = new byte[BUFFER];
   int readLen = 0;
   for (int i = 0; i < fileList.size(); i++) {
     File f = (File) fileList.get(i);
     ze = new ZipEntry(getAbsFileName(baseDir, f));
     ze.setSize(f.length());
     ze.setTime(f.lastModified());
     zos.putNextEntry(ze);
     InputStream is = new BufferedInputStream(new FileInputStream(f));
     while ((readLen = is.read(buf, 0, BUFFER)) != -1) {
       zos.write(buf, 0, readLen);
     }
     is.close();
   }
   zos.setComment(comment);
   zos.close();
 }
  /** 压缩文件zip-Apache中ant所带包 @功能信息 : @参数信息 : @返回值信息 : @异常信息 : */
  public static String getZip(List list, String path, String fileName) throws Exception {
    byte[] buffer = new byte[1024];

    String strZipName = fileName + ".zip";
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(path + strZipName));
    for (int j = 0; j < list.size(); j++) {
      String name = list.get(j).toString();
      FileInputStream fis = new FileInputStream(path + name);
      out.putNextEntry(new ZipEntry(name));
      int len;
      while ((len = fis.read(buffer)) > 0) {
        out.write(buffer, 0, len);
      }
      out.closeEntry();
      fis.close();
      new File(path + name).delete();
    }
    out.close();
    String zipFilePath = path + strZipName;
    //		System.out.println(zipFilePath+"----");
    //		System.out.println("生成Demo.zip成功");
    return zipFilePath;
  }
 private void zipFiles(List<String> srcfile, ByteArrayOutputStream bos) {
   try {
     ZipOutputStream out = new ZipOutputStream(bos);
     out.setEncoding("GBK");
     for (int i = 0; i < srcfile.size(); i++) {
       out.putNextEntry(new ZipEntry(srcfile.get(i)));
       out.write(bos.toByteArray());
     }
     out.closeEntry();
     out.flush();
     out.finish();
     out.close();
   } catch (IOException e) {
     e.printStackTrace();
     logger.error("ZipUtil zipFiles exception:" + e);
   }
 }
  /**
   * 生成房源包
   *
   * @param house
   * @return
   * @throws IOException
   * @throws SQLException
   * @throws JRException
   */
  @SuppressWarnings({"rawtypes", "unchecked"})
  public Map<String, String> createHousePackage(Room room)
      throws IOException, JRException, SQLException {
    Map<String, String> housePackage = new HashMap<String, String>();
    // 临时存储文件路径
    System.out.println("读取房源包路径");
    URL s = HouseService.class.getClassLoader().getResource("");
    String tempDir =
        s.getPath().substring(0, s.getPath().lastIndexOf("WEB-INF")) + "//housePackage/";
    // String tempDir = ResourceManager.getString("zip.file.path");
    // 根据房间编号获得房间图片信息,小区图片信息,公共区域信息等
    Room r = houseAndRoomMapper.selectByRoomId(room.getRoomId());
    House h = houseAndRoomMapper.selectHouseByCode(r.getSysHouseId());

    // 房源包名称
    String fileName = h.getHouseCode() + r.getRoomName() + ".zip";
    String file = tempDir + "//" + fileName;
    housePackage.put("fileName", fileName);
    housePackage.put("downFilePath", file);
    // 文件加锁
    FileOutputStream fos = new FileOutputStream(file);
    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));
    zos.setEncoding("GBK");
    // 图片服务器路径
    String imageUrl = ResourceManager.getString("image.url");
    // 室内图片
    List<RoomPictures> rps = houseAndRoomMapper.selectRoomPicturesByRoomId(r.getSysRoomId());
    int i = 0;
    long start = System.currentTimeMillis();
    for (RoomPictures rp : rps) {
      String path = rp.getImagepath();
      if (path != null && !path.equals("")) {
        int _a = path.lastIndexOf("/");
        path = path.substring(0, _a) + "//v480x360_" + path.substring(_a + 1);
        URL url = new URL(imageUrl + "//" + path);
        InputStream is = url.openStream();
        String _fileName = "室内图片/" + (i++) + ".jpg";
        CompressionUtil.compressFile(zos, is, _fileName);
        is.close();
      }
    }

    // 公共区域图片
    List<RoomPictures> hps = houseAndRoomMapper.selectRoomPicturesByHouseId(r.getSysHouseId());
    i = 0;
    for (RoomPictures rp : hps) {
      String path = rp.getImagepath();
      if (path != null && !path.equals("")) {
        int _a = path.lastIndexOf("/");
        path = path.substring(0, _a) + "//v480x360_" + path.substring(_a + 1);
        URL url = new URL(imageUrl + "//" + path);
        InputStream is = url.openStream();
        String _fileName = "公共区域图片/" + (i++) + ".jpg";
        CompressionUtil.compressFile(zos, is, _fileName);
        is.close();
      }
    }
    long end = System.currentTimeMillis();
    System.out.println("图片打包时间:" + (end - start) / 1000);

    // 物品配置家具
    Map map = new HashMap();
    map.put("sysRoomId", r.getSysRoomId());
    map.put("itemType", "jj4");
    map.put("sysHouseId", r.getSysHouseId());
    List<String> _c1 = houseAndRoomMapper.selectItemByRoom(map);
    List<String> _c2 = houseAndRoomMapper.selectItemByPub(map);
    // 家电
    map.put("itemType", "jd");
    List<String> _c3 = houseAndRoomMapper.selectItemByRoom(map);
    List<String> _c4 = houseAndRoomMapper.selectItemByPub(map);
    // 家居
    map.put("itemType", "jj1");
    List<String> _c5 = houseAndRoomMapper.selectItemByRoom(map);
    List<String> _c6 = houseAndRoomMapper.selectItemByPub(map);
    System.out.println("读取jasper文件");
    // 其它房屋租住状态
    StringBuilder sb = new StringBuilder();
    List<Map> rooms = houseAndRoomMapper.selectOtherRoom(map);
    int count = 0;
    for (int j = 0; j < rooms.size(); j++) {
      Map rm = rooms.get(j);
      String rentstatus = rm.get("rentstatus") != null ? rm.get("rentstatus").toString() : "";
      String position = rm.get("roomposition") != null ? rm.get("roomposition").toString() : "";
      if (rentstatus.equals("ycz")) {
        String sex = rm.get("sex") != null ? rm.get("sex").toString() : "";
        String professional =
            rm.get("professional") != null ? rm.get("professional").toString() : "";
        String code = rm.get("code") != null ? rm.get("code").toString() : "";
        ;
        sb.append(!position.equals("") ? (position + "卧" + code + "住着一位") : "");
        sb.append(!sex.equals("") ? sex + "性" : "");
        sb.append(!professional.equals("") ? professional : "");
        sb.append(";");
      } else {
        sb.append(!position.equals("") ? (position + "卧待租 ;") : "卧室待租; ");
        count++;
      }
    }
    // 房间待租数量
    if (count == rooms.size()) {
      sb = new StringBuilder();
    }
    // 房源word文档
    URL u = this.getClass().getClassLoader().getResource("cn/ziroom/house/service/package.jasper");
    System.out.println("文件路径:" + u.getPath());
    String reportFile = u.getFile();
    Map parameter = new HashMap();
    parameter.put("roomId", room.getRoomId());
    parameter.put("c1", StringUtils.split(_c1, ","));
    parameter.put("c2", StringUtils.split(_c2, ","));
    parameter.put("c3", StringUtils.split(_c3, ","));
    parameter.put("c4", StringUtils.split(_c4, ","));
    parameter.put("c5", StringUtils.split(_c5, ","));
    parameter.put("c6", StringUtils.split(_c6, ","));
    parameter.put("c7", sb.toString());
    start = System.currentTimeMillis();
    System.out.println("填充报表");
    // docx
    String filePath = JasperreportsUtils.docx(reportFile, parameter, dataSource.getConnection());
    File _file = new File(filePath);
    FileInputStream fis = new FileInputStream(_file);
    CompressionUtil.compressFile(zos, fis, h.getHouseCode() + r.getRoomName() + ".docx");
    fis.close();
    _file.delete();
    // doc
    String docFilePath = JasperreportsUtils.doc(reportFile, parameter, dataSource.getConnection());
    File _docfile = new File(docFilePath);
    FileInputStream docfis = new FileInputStream(_docfile);
    CompressionUtil.compressFile(zos, docfis, h.getHouseCode() + r.getRoomName() + ".doc");
    fis.close();
    _docfile.delete();

    byte[] html = JasperreportsUtils.html(reportFile, parameter, dataSource.getConnection());
    InputStream is = new ByteArrayInputStream(html);
    CompressionUtil.compressFile(zos, is, h.getHouseCode() + r.getRoomName() + ".html");

    end = System.currentTimeMillis();
    System.out.println("报表生成时间:" + (end - start) / 1000);
    is.close();
    zos.close();
    fos.close();
    return housePackage;
  }
  private Attachment prepareAttachment(User user, List<UploadedFile> files, String tags) {
    System.out.println("prepare attachment...");
    if (files.isEmpty()) {
      System.out.println("files are empty");
      if (log.isDebugEnabled()) {
        log.debug("prepareAttachment() : List of files is empty! Nothing to compress.");
      }
      return null;
    }
    if (files.size() == 1) {
      if (log.isTraceEnabled()) {
        log.trace(
            "prepareAttachment() : Single file is being uploaded. Delegating to uploadFile()");
      }
      try {
        return prepareAttachment(
            files.get(0).getFileName(),
            files.get(0).getContentType(),
            user,
            files.get(0).getContents(),
            tags);
      } catch (IOException ex) {
        if (log.isTraceEnabled()) {
          log.trace("prepareAttachment() : I/O exception" + ex);
        }
        return null;
      }
    }

    try {
      // create zip file
      log.trace("prepareAttachment(): Creating zip-file");

      File root = new File(DEFAULT_UPLOAD_DIRECTORY, "user" + user.getId());
      root.mkdirs();
      File file = File.createTempFile("upload_", ".zip", root);

      ZipOutputStream zos = null;

      try {
        //                zos = new ZipOutputStream
        zos = new ZipOutputStream(file);
        zos.setEncoding("utf-8");
        zos.setMethod(ZipOutputStream.DEFLATED);
        zos.setLevel(Deflater.BEST_COMPRESSION);

        for (UploadedFile uf : files) {
          addFileToZip(zos, uf, uf.getFileName());
        }
      } finally {
        FileUtils.close(zos);
      }

      //            try (ZipOutputStream zos = new ZipOutputStream(file)) {
      //                zos.setEncoding("utf-8");
      //                zos.setMethod(ZipOutputStream.DEFLATED);
      //                zos.setLevel(Deflater.BEST_COMPRESSION);
      //
      //                for (UploadedFile uf : files) {
      //                    addFileToZip(zos, uf, uf.getFileName());
      //                }
      //            }

      if (log.isDebugEnabled()) {
        log.debug("prepareAttachment(): Files are saved at " + file);
      }

      if (file.length() > MAX_ZIP_SIZE) {
        file.delete();
        throw new IOException("File too large.");
      }

      // Create attachment
      Attachment att = new Attachment();
      att.setName(file.getName());
      att.setMimeType("application/zip");
      att.setSize(file.length());
      att.setMD5(FileUtils.getMD5(file));
      att.setFileName("user" + user.getId() + "/" + file.getName());

      if (log.isTraceEnabled()) {
        log.trace("<< prepareAttachment()");
      }
      return att;
    } catch (IOException ex) {
      log.error("prepareAttachment(): Failed to upload files. ", ex);
      return null;
    }
  }