Kotlin में ZIP-आर्काइव के साथ कार्य: पूरी गाइड
Kotlin (JVM) में आधुनिक डेवलपमेंट में, अक्सर फ़ाइलों को पैक या अनपैक करने की आवश्यकता होती है। Java की मानक लाइब्रेरी java.util.zip पैकेज के माध्यम से ZIP फ़ॉर्मेट के साथ कार्य करने के लिए शक्तिशाली उपकरण प्रदान करती है। इस लेख में, हम विस्तार से समझेंगे कि Kotlin और JVM की अंतर्निहित क्षमताओं का उपयोग करके ZIP-आर्काइव कैसे बनाएं, पढ़ें और संशोधित करें।
ZIP के साथ कार्य के लिए मुख्य क्लासेज़
Kotlin में ZIP-आर्काइव के साथ कार्य करने के लिए java.util.zip से निम्नलिखित क्लासेज़ का उपयोग किया जाता है:
- ZipOutputStream — नए ZIP-आर्काइव बनाने और उनमें फ़ाइलें जोड़ने के लिए।
- ZipInputStream — आर्काइव की सामग्री को क्रमिक रूप से पढ़ने के लिए (स्ट्रीम मोड)।
- ZipFile — आर्काइव की प्रविष्टियों तक यादृच्छिक पहुँच के लिए (रैंडम एक्सेस)।
- ZipEntry — आर्काइव के अंदर एक अलग प्रविष्टि (फ़ाइल या निर्देशिका) का प्रतिनिधित्व करता है।
ये सभी क्लासेज़ JDK की मानक लाइब्रेरी का हिस्सा हैं, इसलिए किसी अतिरिक्त डिपेंडेंसी की आवश्यकता नहीं है।
ZIP-आर्काइव बनाना
आर्काइव बनाने के लिए ZipOutputStream का उपयोग किया जाता है, जो FileOutputStream को रैप करता है। प्रत्येक फ़ाइल ZipEntry के माध्यम से जोड़ी जाती है।
import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipEntryimport java.util.zip.ZipOutputStream
fun createZipArchive(sourceDir: String, zipFilePath: String) { val dir = File(sourceDir) val files = dir.listFiles() ?: return ZipOutputStream(FileOutputStream(zipFilePath)).use { zos -> for (file in files) { if (file.isFile) { // फ़ाइल नाम के साथ एक प्रविष्टि बनाएँ val entry = ZipEntry(file.name) zos.putNextEntry(entry) // फ़ाइल की सामग्री कॉपी करें FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } } println("आर्काइव बनाया गया: $zipFilePath")}
// कॉल करने का उदाहरणfun main() { createZipArchive("/path/to/source", "/path/to/archive.zip")}ZIP-आर्काइव को अनज़िप करना
अनज़िप करना ZipInputStream के माध्यम से किया जाता है। हम प्रत्येक प्रविष्टि को पढ़ते हैं और डिस्क पर फ़ाइलों को पुनर्स्थापित करते हैं।
import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipInputStream
fun extractZipArchive(zipFilePath: String, outputDir: String) { val outputFolder = File(outputDir).also { it.mkdirs() } ZipInputStream(FileInputStream(zipFilePath)).use { zis -> var entry = zis.nextEntry while (entry != null) { val fileName = entry.name val outputFile = File(outputFolder, fileName) // यदि आवश्यक हो तो पैरेंट निर्देशिकाएँ बनाएँ outputFile.parentFile?.mkdirs() // केवल फ़ाइलों को अनज़िप करें (निर्देशिकाओं को नहीं) if (!entry.isDirectory) { FileOutputStream(outputFile).use { fos -> zis.copyTo(fos) } } entry = zis.nextEntry } } println("आर्काइव अनज़िप किया गया: $outputDir")}
// कॉल करने का उदाहरणfun main() { extractZipArchive("/path/to/archive.zip", "/path/to/extract")}बिना अनज़िप किए आर्काइव की सामग्री पढ़ना
ZIP के अंदर फ़ाइलों को निकाले बिना देखने के लिए ZipFile और entries() पर इटरेशन का उपयोग करें।
import java.io.Fileimport java.util.zip.ZipFile
fun listZipContents(zipFilePath: String) { ZipFile(File(zipFilePath)).use { zipFile -> println("आर्काइव की सामग्री: ${zipFile.name}") println("कुल प्रविष्टियाँ: ${