Π’Ρ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ Π°ΡΡ
ΠΈΠ²Π°, Π΅ΡΠ»ΠΈ Π΅Π΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡ ΠΊΠ»Π°ΡΡ ZipFileManager.
Π ΠΌΠ΅ΡΠΎΠ΄Π΅ createZip Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΉΠ» Π² Π°ΡΡ
ΠΈΠ², ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈ Ρ.Π΄.
ΠΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠΎΠ·ΠΆΠ΅, Π½ΠΎ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ½Π΅ΡΡΠΈ ΠΎΠ±ΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ createZip ΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°ΡΡ
ΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π° Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΡΠΌΠ΅ΡΡ Π°ΡΡ
ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΏΠ°ΠΏΠΊΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ.
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, Ρ.ΠΊ. Π² createZip(Path source) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΠ°Π΄Π°Π½ΠΈΡ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ:
1. Π Π΅Π°Π»ΠΈΠ·ΡΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void addNewZipEntry(ZipOutputStream zipOutputStream, Path filePath, Path fileName) throws Exception Π² ΠΊΠ»Π°ΡΡΠ΅ ZipFileManager.
ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½:
1.1. Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ InputStream, Π΄Π»Ρ ΡΠ°ΠΉΠ»Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ fileName, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ filePath
1.2. Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π°ΡΡ
ΠΈΠ²Π° ZipEntry, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ fileName, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π² Π΅Π³ΠΎ Π² String
1.3. ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ zipOutputStream Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π°ΡΡ
ΠΈΠ²Π° ZipEntry (ΠΈΠ· ΠΏ.1.2)
1.4. ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· InputStream (ΠΈΠ· ΠΏ.1.1) Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ zipOutputStream
1.5. ΠΠ°ΠΊΡΡΠ²Π°ΡΡ Π² zipOutputStream ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π°ΡΡ
ΠΈΠ²Π° ZipEntry (ΠΈΠ· ΠΏ.1.2)
1.6. ΠΠ°ΠΊΡΡΠ²Π°ΡΡ InputStream, ΡΠ΄Π΅Π»Π°ΠΉ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ try-with-resources
2. ΠΠ°ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π° createZip Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° addNewZipEntry.
ΠΠ΅ΡΠ΅Π΄Π°ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ source.getParent() Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ filePath, Π° source.getFileName() Π² filename.
3. Π Π΅Π°Π»ΠΈΠ·ΡΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void copyData(InputStream in, OutputStream out) throws Exception.
ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· in ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² out, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅.
4. ΠΠ°ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π° addNewZipEntry Π½Π° Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° copyData
5. ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ createZip:
5.1. Π Π½Π°ΡΠ°Π»Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΎΠ²Π΅ΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ (zipFile.getParent()), Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ zipFile, Π΅ΡΠ»ΠΈ Π΅Π΅ Π½Π΅Ρ, ΡΠΎ ΡΠΎΠ·Π΄Π°ΠΉ Π΅Π΅.
5.2. ΠΡΠ»ΠΈ source ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ (Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ Files.isRegularFile), ΡΠΎ ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ² addNewZipEntry
5.3. ΠΡΠ»ΠΈ source ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ (Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ Files.isDirectory), ΡΠΎ:
5.3.1. Π‘ΠΎΠ·Π΄Π°ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ FileManager, Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ source
5.3.2. ΠΠΎΠ»ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°, ΡΠΎΡ
ΡΠ°Π½ΠΈΠΌ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ fileNames
5.3.3. ΠΠ»Ρ Π²ΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² fileNames, Π²ΡΠ·ΠΎΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ addNewZipEntry(zipOutputStream, source, fileName)
5.4. ΠΡΠ»ΠΈ source Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΎΠΉ, Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠΌ, ΡΠΎ ΠΊΠΈΠ½Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ PathIsNotFoundException.
- Π ΠΊΠ»Π°ΡΡΠ΅ ZipFileManager Π΄ΠΎΠ±Π°Π²Ρ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void addNewZipEntry(ZipOutputStream zipOutputStream, Path filePath, Path fileName) throws Exception.
- ΠΠ΅ΡΠΎΠ΄ addNewZipEntry Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ.
- ΠΠ°ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π° createZip Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° addNewZipEntry.
- Π ΠΊΠ»Π°ΡΡΠ΅ ZipFileManager Π΄ΠΎΠ±Π°Π²Ρ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ void copyData(InputStream in, OutputStream out) throws Exception.
- ΠΠ΅ΡΠΎΠ΄ copyData Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· in ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² out, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ Π±Π°ΠΉΡΡ.
- ΠΠ°ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π° addNewZipEntry Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° copyData.
- ΠΠ΅ΡΠΎΠ΄ createZip Π² ΠΊΠ»Π°ΡΡΠ΅ ZipFileManager Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ»Π΅Π΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ.