2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
विषयवस्तुसारणी
2. कोडप्रदर्शनम् (विघटितसंस्करणम्) .
3. कोडप्रदर्शनम् (समग्रं संस्करणम्) .
1.IO धारा: 1.1.
Input: input, "input stream" इत्यस्य माध्यमेन सञ्चिकाः पठन्तु।
आउटपुट् : आउटपुट्, "output stream" इत्यस्य माध्यमेन सञ्चिकाः लिखन्तु ।
2. सञ्चिकासञ्चालनम् सम्बद्धम् : १.
सञ्चिकावर्गः : सञ्चिकानां निर्देशिकानां च मार्गाणां प्रतिनिधित्वार्थं उपयुज्यते ।
FileInputStream तथा FileOutputStream: सञ्चिकाः पठितुं लेखितुं च उपयुज्यन्ते ।
3. संपीडितसञ्चिकासंसाधनम् : १.
ZipInputStream: ZIP संपीडितसञ्चिकानां पठनार्थं निवेशप्रवाहः ।
ZipEntry: ZIP संपीडितसञ्चिकायां प्रविष्टिं (सञ्चिकां वा निर्देशिकां वा) प्रतिनिधियति ।
4.अपवादनियन्त्रणम् : १.
FileNotFoundException: अस्तित्वहीनां सञ्चिकां प्राप्तुं प्रयतमाने क्षिप्तम् ।
IOException: इनपुट्-आउटपुट्-सञ्चालनेषु सामान्य-अपवादानाम् नियन्त्रणार्थं प्रयुक्तम् ।
RarException: RAR संग्रहणसञ्चालनसम्बद्धानि विशिष्टानि अपवादाः सम्पादयति ।
5. आँकडा निवेशः निर्गमः च धाराः : १.
InputStream: दत्तांशपठनार्थं इनपुट् स्ट्रीम।
6. संग्रहणसञ्चालनम् : १.
सूची: सञ्चिकाशीर्षकसूचनाः संग्रहीतुं प्रयुक्ता सूची ।
7. तुलनात्मकः : १.सञ्चिकाशीर्षकसूचीं क्रमयितुं प्रयुक्तम् ।
8. तृतीयपक्षपुस्तकालये FileUtils वर्ग commons-io:(इदं जार-सङ्कुलं लेखस्य अन्ते अस्ति)
निर्देशिकाः विलोपयितुं निवेशप्रवाहानाम् सञ्चिकासु प्रतिलिपिं कर्तुं च उपयुज्यते ।
Step 1: सञ्चिकाप्रकारं निर्धारयन्तु
- यदि ".zip" सञ्चिका अस्ति तर्हि ZIP सञ्चिकां विसंपीडयितुं unzip() विधिं आह्वयन्तु यदि ".rar" सञ्चिका अस्ति तर्हि RAR सञ्चिकां विसंपीडयितुं unrar() विधिं आह्वयन्तु ।
- //指定文件夹
- String Path = “D:\...\xxxx.zip”
- String Path = “D:\...\xxxx.rar”
- }
- //1.判断文件类型
- if(path.endsWith(".zip")) {
- unzip(path);
- }else if(path.endsWith(".rar")) {
- unrar(path);
- }
- }
Step 2: unzip() मेथड् परिभाषयन्तु
- इनपुट् सञ्चिकामार्गस्य आधारेण स्रोतसञ्चिकावस्तु निर्माति ।
- विसंपीडितं मूलनिर्देशिकामार्गं निर्धारयित्वा तत्सम्बद्धं सञ्चिकावस्तु रचयन्तु ।
- यदि मूलनिर्देशिका पूर्वमेव अस्ति तर्हि तत् विलोपयितुं प्रयतस्व (उपयोगं च
FileUtils
Utility class अरिक्तनिर्देशिकाः विलोपयति) ततः मूलनिर्देशिकां पुनः निर्माति ।- ZIP प्रारूपं पठितुं निवेशधारा रचयन्तु ।
- संग्रहे प्रत्येकं प्रविष्टिः (उपसञ्चिका वा उपनिर्देशिका वा) माध्यमेन पुनरावृत्तिः कुर्वन्तु ।
- प्रत्येकं प्रविष्टेः कृते तत्सम्बद्धं सञ्चिकावस्तु रचयन्तु ।
- प्रविष्टिः उपसञ्चिका अस्ति वा उपनिर्देशिका वा इति निर्धारयन्तु, क्रमशः सञ्चिकां वा निर्देशिकां वा रचयन्तु ।
- उपसञ्चिकानां कृते एकं आउटपुट् स्ट्रीम रचयन्तु, इनपुट् स्ट्रीमतः दत्तांशं पठित्वा उपसञ्चिकायां लिखन्तु ।
- सम्भाव्यं सञ्चिकां न लब्धां तथा च निवेशं निर्गमं च अपवादं च नियन्त्रयन्तु ।
- //2.解压缩zip格式
- public static void unzip(String path) {
- //(1)根据原始路径(字符串),创建源文件(File对象)
- File sourceFile = new File(path);
-
- //(2)根目录
- String sourceName = sourceFile.getName();
- File rootDir = new File(sourceFile.getParent()+"\"+sourceName.substring(0,sourceName.lastIndexOf(".")));
-
- //(3)判断根目录是否已经存在
- if(rootDir.exists()) {
- //若存在,则删除
- rootDir.delete();//只能删除空目录
- //使用commons-io包提供的FileUtils工具类进行删除
- try {
- FileUtils.deleteDirectory(rootDir);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //(4)创建根目录
- rootDir.mkdir();
-
- //(5)ZipInputStream:用于进行zip格式的压缩输入流
- try {
- ZipInputStream in = new ZipInputStream(new FileInputStream(sourceFile));
-
- //(6)遍历压缩包中每个子文件子目录(zipEntry类型的对象)
- ZipEntry zipEntry = null;
- while((zipEntry = in.getNextEntry())!=null) {
- //(7)创建子文件子目录(File对象)
- File file = new File(rootDir.getPath()+"\"+zipEntry.getName());
-
- //(8)判断是子文件还是子目录(不是子目录就是子文件)
- if(zipEntry.isDirectory()) {
- //物理磁盘创建子目录
- file.mkdir();
- }else {
- //物理磁盘创建子文件
- file.createNewFile();
- //(9)子文件的写入
- //读取当前压缩包的子文件,并通过输出流out写入新子文件中
- try (FileOutputStream out = new FileOutputStream(file)) {
-
- byte[] buff = new byte[1024];
- int len = -1;
- while((len = in.read(buff))!=-1) {
- out.write(buff,0,len);
- }
- }
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
Step 3: unrar() मेथड् परिभाषयन्तु
- इनपुट् RAR सञ्चिकामार्गस्य आधारेण मूलनिर्देशिकायाः सञ्चिकावस्तु रचयन्तु ।
- मूलनिर्देशिका अस्ति वा इति निर्धारयन्तु, यदि अस्ति तर्हि तत् विलोपयितुं प्रयतध्वम् (उपयोगः
FileUtils
सम्भवं अपवादं सम्पादयन्तु) ततः मूलनिर्देशिकां रचयन्तु ।- RAR संपीडितसञ्चिकानां पठनार्थं सञ्चिकां रचयन्तु
Archive
वस्तु।- संपीडितसञ्चिकायां सर्वाणि उपनिर्देशिकाः उपसञ्चिकाः च प्राप्नुवन्तु
FileHeader
वस्तुं कृत्वा सूचीयां संगृहीतम्।- उपनिर्देशिकानां उपसञ्चिकानां च नाम्ना सूचीं क्रमयन्तु ।
- सूचीस्थ प्रत्येकस्य द्रव्यस्य उपरि पुनरावृत्तिः कुर्वन्तु
FileHeader
वस्तु।- तदनुसारम्
FileHeader
Object तत्सम्बद्धं file object निर्माति ।- उपनिर्देशिका वा उपसञ्चिका वा इति निर्धारयन्तु, क्रमशः निर्देशिकां वा सञ्चिकां वा रचयन्तु ।
- उपसञ्चिकानां कृते, निवेशप्रवाहं प्राप्य उपयोगं कुर्वन्तु
FileUtils
निवेशधाराम् उपसञ्चिकायां प्रतिलिपिं करोति ।- सम्भाव्य RAR-सम्बद्धान् अपवादं तथा निवेश-निर्गम-अपवादं सम्पादयन्तु ।
- //3.解压缩rar格式
- public static void unrar(String path) {
- //(1)创建解压缩的根目录
- File rarFile = new File(path);
- File rootDir = new File(rarFile.getParent()+"\"+rarFile.getName().substring(0,rarFile.getName().lastIndexOf(".")));
- //(2)判断是否存在
- if(rootDir.exists()) {
- try {
- FileUtils.deleteDirectory(rootDir);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- rootDir.mkdir();
-
- //(3)创建Archive对象,用于读取rar压缩文件格式
- try (Archive archive = new Archive(new FileInputStream(path))){
-
- //(4)获取压缩文件所有子目录子文件(FileHeader对象)
- List<FileHeader> fileheaderList = archive.getFileHeaders();
-
- //(5)按照子目录(子文件)名称排序
- fileheaderList.sort(new Comparator<FileHeader>() {
- @Override
- public int compare(FileHeader o1, FileHeader o2) {
- return o1.getFileName().compareTo(o2.getFileName());
- }
- });
- //(6)遍历子目录子文件
- for(FileHeader fd : fileheaderList) {
- File f = new File(rootDir.getPath()+"\"+fd.getFileName());
-
- if(fd.isDirectory()) {
- //物理磁盘创建子目录
- f.mkdir();
- }else {
- //物理磁盘创建子文件
- f.createNewFile();
-
- //获取压缩包中子文件输入流
- InputStream in = archive.getInputStream(fd);
-
- //复制文件输入流至子文件
- FileUtils.copyInputStreamToFile(in, f);
- }
- }
-
- } catch (RarException | IOException e) {
- e.printStackTrace();
- }
- }
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Comparator;
- import java.util.List;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
-
- import org.apache.commons.io.FileUtils;
-
- import com.github.junrar.Archive;
- import com.github.junrar.exception.RarException;
- import com.github.junrar.rarfile.FileHeader;
-
- public class Test {
- //指定文件夹
- String Path = “D:\...\xxxx.zip”
- String Path = “D:\...\xxxx.rar”
- }
- //1.判断文件类型
- if(path.endsWith(".zip")) {
- unzip(path);
- }else if(path.endsWith(".rar")) {
- unrar(path);
- }
- }
- //2.解压缩zip格式
- public static void unzip(String path) {
- //(1)根据原始路径(字符串),创建源文件(File对象)
- File sourceFile = new File(path);
-
- //(2)根目录
- String sourceName = sourceFile.getName();
- File rootDir = new File(sourceFile.getParent()+"\"+sourceName.substring(0,sourceName.lastIndexOf(".")));
-
- //(3)判断根目录是否已经存在
- if(rootDir.exists()) {
- //若存在,则删除
- rootDir.delete();//只能删除空目录
- //使用commons-io包提供的FileUtils工具类进行删除
- try {
- FileUtils.deleteDirectory(rootDir);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //(4)创建根目录
- rootDir.mkdir();
-
- //(5)ZipInputStream:用于进行zip格式的压缩输入流
- try {
- ZipInputStream in = new ZipInputStream(new FileInputStream(sourceFile));
-
- //(6)遍历压缩包中每个子文件子目录(zipEntry类型的对象)
- ZipEntry zipEntry = null;
- while((zipEntry = in.getNextEntry())!=null) {
- //(7)创建子文件子目录(File对象)
- File file = new File(rootDir.getPath()+"\"+zipEntry.getName());
-
- //(8)判断是子文件还是子目录(不是子目录就是子文件)
- if(zipEntry.isDirectory()) {
- //物理磁盘创建子目录
- file.mkdir();
- }else {
- //物理磁盘创建子文件
- file.createNewFile();
- //(9)子文件的写入
- //读取当前压缩包的子文件,并通过输出流out写入新子文件中
- try (FileOutputStream out = new FileOutputStream(file)) {
-
- byte[] buff = new byte[1024];
- int len = -1;
- while((len = in.read(buff))!=-1) {
- out.write(buff,0,len);
- }
- }
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //3.解压缩rar格式
- public static void unrar(String path) {
- //(1)创建解压缩的根目录
- File rarFile = new File(path);
- File rootDir = new File(rarFile.getParent()+"\"+rarFile.getName().substring(0,rarFile.getName().lastIndexOf(".")));
- //(2)判断是否存在
- if(rootDir.exists()) {
- try {
- FileUtils.deleteDirectory(rootDir);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- rootDir.mkdir();
-
- //(3)创建Archive对象,用于读取rar压缩文件格式
- try (Archive archive = new Archive(new FileInputStream(path))){
-
- //(4)获取压缩文件所有子目录子文件(FileHeader对象)
- List<FileHeader> fileheaderList = archive.getFileHeaders();
-
- //(5)按照子目录(子文件)名称排序
- fileheaderList.sort(new Comparator<FileHeader>() {
- @Override
- public int compare(FileHeader o1, FileHeader o2) {
- return o1.getFileName().compareTo(o2.getFileName());
- }
- });
- //(6)遍历子目录子文件
- for(FileHeader fd : fileheaderList) {
- File f = new File(rootDir.getPath()+"\"+fd.getFileName());
-
- if(fd.isDirectory()) {
- //物理磁盘创建子目录
- f.mkdir();
- }else {
- //物理磁盘创建子文件
- f.createNewFile();
-
- //获取压缩包中子文件输入流
- InputStream in = archive.getInputStream(fd);
-
- //复制文件输入流至子文件
- FileUtils.copyInputStreamToFile(in, f);
- }
- }
-
- } catch (RarException | IOException e) {
- e.printStackTrace();
- }
- }
- }
-
उपरिष्टात् सामान्यसंपीडनस्वरूपद्वये (ZIP तथा RAR) सञ्चिकानां कृते विसंपीडनकार्यं प्रदाति । निवेशसञ्चिकायाः प्रारूपस्य न्यायं कृत्वा (सञ्चिकाविस्तारस्य अनुसारं), तत्सम्बद्धं विसंपीडनविधिं (unzip
वाunrar
), संपीडितसञ्चिकायाः सामग्रीं निर्दिष्टनिर्देशिकायां सम्यक् विसंपीडयितुं शक्नोति ।
एतत् विशेषता अनेकेषु परिदृश्येषु अतीव उपयोगी भवति, यथा-
समग्रतया, एषः कोडः ZIP तथा RAR संपीडितसञ्चिकानां विसंपीडनकार्यक्रमं नियन्त्रयितुं लचीलाः पुनः उपयोगयोग्यः च मार्गं प्रदाति, यत् विभिन्नेषु अनुप्रयोगेषु संपीडितसञ्चिकानां संसाधनस्य आवश्यकतां पूरयति