[JAVA] 기존 압축 파일에 파일 추가

jihun Choi·2023년 5월 5일
0
post-thumbnail

안녕하세요 오늘은 압축파일이 있을때 새로운 파일을 압축파일에 추가해보도록 하겠습니다

😎 기존 압축파일 내 image1.png, image2.png, image3.png 파일이 들어가 있는데 압축파일을 제거하지않고 testimage.png를 압축파일에 추가해 보도록 하겠습니다

위 사진과 같이 파일을 셋팅해줍니다

public void addZip(String filePath, List<String> fileNames) throws Exception{
     File file = new File(filePath, "testimage.png");
     File zipFile = new File(filePath, "압축파일.zip");
     byte[] buf = new byte[4096];

     File tempFile = null;

     tempFile = File.createTempFile(zipFile.getName(), null);
     tempFile.delete();

     boolean renameOK = zipFile.renameTo(tempFile);

     ZipOutputStream out = null;
     ZipInputStream zin = null;
     InputStream in = null;

     try{
         out = new ZipOutputStream(new FileOutputStream(zipFile));
         zin = new ZipInputStream(new FileInputStream(tempFile));
         in = new FileInputStream(file);

         ZipEntry entry = zin.getNextEntry();
         while(entry != null){
             String name = entry.getName();
             if(!file.getName().equals(name)){
                 out.putNextEntry(new ZipEntry(name));
                 int len;
                 while((len = zin.read(buf)) > 0){
                     out.write(buf, 0, len);
                 }
             }
             entry = zin.getNextEntry();
         }

         out.putNextEntry(new ZipEntry(file.getName()));
         int len;
         while((len = in.read(buf)) > 0){
             out.write(buf, 0 , len);
         }

        }catch(IOException e){
			e.printStackTrace();
        }finally {
            tempFile.delete();
            in.close();
            zin.close();
            out.close();
        }
 }
  1. 압축파일을 temp파일로 만들어줍니다
  2. temp 파일을 지우고 압축파일을 temp로 바꿔줍니다
  3. 임시 zip파일에 있는 파일을 하나씩 zipInputstream 으로 받아 zipoutstream으로 원래 zip파일 경로에 zip파일을 새로 추가하여 넣어줍니다 만약 같은 이름의 파일이 있다면 덮어 줘야 되기 때문에 파일이름이 다를때만 추가해줍니다
  4. 임시 zip파일에 있는 파일들을 다 보내줬다면 새로 추가하는 파일을 inputstream으로 받아 zipoutstream으로 보내줍니다

압축파일.zip을 풀어준 결과 testimage.png가 정상으로 나오는것을 확인 할 수 있었습니다

profile
성장을 위해 열심히 노력하는 개발자 입니다

0개의 댓글