1
+ package com.baeldung.createZip
2
+
3
+ import net.lingala.zip4j.ZipFile
4
+ import net.lingala.zip4j.model.ZipParameters
5
+ import net.lingala.zip4j.model.enums.CompressionLevel
6
+ import net.lingala.zip4j.model.enums.CompressionMethod
7
+ import org.apache.commons.compress.archivers.zip.ZipArchiveEntry
8
+ import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
9
+ import org.apache.commons.compress.utils.IOUtils
10
+ import org.junit.jupiter.api.Assertions.assertTrue
11
+ import org.junit.jupiter.api.Test
12
+ import java.io.File
13
+ import java.io.FileInputStream
14
+ import java.io.FileOutputStream
15
+ import java.util.zip.ZipEntry
16
+ import java.util.zip.ZipOutputStream
17
+
18
+ class CreateZipFileUnitTest {
19
+
20
+ val filesToZip = listOf (File (" file1.txt" ).apply { writeText(" Hello, World!" ) }, File (" file2.txt" ).apply { writeText(" Kotlin ZIP Test" ) })
21
+
22
+ @Test
23
+ fun `create zip file with java standard library` () {
24
+ val outputZipFile = File (" test_output.zip" )
25
+
26
+ createZipFile(filesToZip, outputZipFile)
27
+
28
+ assertTrue(outputZipFile.exists())
29
+ assertTrue(outputZipFile.length() > 0 )
30
+
31
+ filesToZip.forEach { it.delete() }
32
+ outputZipFile.delete()
33
+ }
34
+
35
+ @Test
36
+ fun `create zip file with apache commons compress` () {
37
+ val outputZipFile = File (" test_output_with_apache.zip" )
38
+
39
+ createZipFileWithApache(filesToZip, outputZipFile)
40
+
41
+ assertTrue(outputZipFile.exists())
42
+ assertTrue(outputZipFile.length() > 0 )
43
+
44
+ // Clean up
45
+ filesToZip.forEach { it.delete() }
46
+ outputZipFile.delete()
47
+ }
48
+
49
+ @Test
50
+ fun `create zip file with Zip4j library` () {
51
+ val outputZipFile = File (" test_output_with_zip4j.zip" )
52
+
53
+ createZipFileWithZip4j(filesToZip, outputZipFile)
54
+
55
+ assertTrue(outputZipFile.exists())
56
+ assertTrue(outputZipFile.length() > 0 )
57
+
58
+ filesToZip.forEach { it.delete() }
59
+ outputZipFile.delete()
60
+ }
61
+ }
62
+ fun createZipFile (files : List <File >, outputZipFile : File ) {
63
+ ZipOutputStream (FileOutputStream (outputZipFile)).use { zipOut ->
64
+ files.forEach { file ->
65
+ FileInputStream (file).use { fis ->
66
+ val zipEntry = ZipEntry (file.name)
67
+ zipOut.putNextEntry(zipEntry)
68
+ fis.copyTo(zipOut)
69
+ zipOut.closeEntry()
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ fun createZipFileWithApache (files : List <File >, outputZipFile : File ) {
76
+ ZipArchiveOutputStream (FileOutputStream (outputZipFile)).use { zipOut ->
77
+ files.forEach { file ->
78
+ zipOut.putArchiveEntry(ZipArchiveEntry (file.name))
79
+ FileInputStream (file).use { fis ->
80
+ IOUtils .copy(fis, zipOut)
81
+ }
82
+ zipOut.closeArchiveEntry()
83
+ }
84
+ }
85
+ }
86
+
87
+ fun createZipFileWithZip4j (files : List <File >, outputZipFile : File ) {
88
+ val zipFile = ZipFile (outputZipFile)
89
+ val parameters = ZipParameters ().apply {
90
+ compressionMethod = CompressionMethod .DEFLATE
91
+ compressionLevel = CompressionLevel .NORMAL
92
+ }
93
+ zipFile.addFiles(files, parameters)
94
+ }
0 commit comments