Dateien verwalten mit Modul jdk.httpserver
ulrich
2024-01-15 8e6840f2eaefe0f7b4763acd5edace0187bf29d3
commit | author | age
8e6840 1 /*
U 2   http-cm - File management extensions to jdk.httpserver
3   Copyright (C) 2021  Ulrich Hilger
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.httpserver.cm.actor;
020a97 19
U 20 import java.io.File;
21 import java.io.FileOutputStream;
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.util.Enumeration;
25 import java.util.zip.ZipEntry;
26 import java.util.zip.ZipFile;
27
28 /**
8e6840 29  * Eine Klasse mit Methoden zum entpacken von Dateien
U 30  * 
31  * @author Ulrich Hilger, 15. Januar 2024
020a97 32  */
U 33 public class Unzipper {
34   /* --------- ZIP entpacken ---------------- */
35   
36   public String extractZipfile(String fName, String relPath, String base) {  
37     //logger.fine("fName: " + fName + ", relPath: " + relPath);
38     String result = null;
39     if (!relPath.startsWith(".")) {    
40       try {
41         //File targetDir = new File(fileBase, relPath);
42         //File targetDir = getTargetDir(relPath);
43         File archive = new File(base, fName);
44         if(extract(archive)) {
45           result = "ok";
46         } else {
47           result = "error while extracting";
48         }
49       } catch(Exception ex) {
50         result = ex.getLocalizedMessage();
51         //logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
52       }
53     } else {
54       result = "Falsche relative Pfadangabe.";
55     }
56     return result;
57   }
58   
59   /**
60      * extract a given ZIP archive to the folder respective archive resides in
61      * @param archive  the archive to extract
62      * @throws Exception
63      */
64     private boolean extract(File archive) throws Exception {
65         ZipFile zipfile = new ZipFile(archive);
66         Enumeration en = zipfile.entries();
67         while(en.hasMoreElements()) {
68             ZipEntry zipentry = (ZipEntry) en.nextElement();
69             unzip(zipfile, zipentry, archive.getParent());
70         }
71         zipfile.close();
72         return true;
73     }
74
75     /**
76      * unzip a given entry of a given zip file to a given location
77      * @param zipfile  the zip file to read an entry from
78      * @param zipentry  the zip entry to read
79      * @param destPath  the path to the destination location for the extracted content
80      * @throws IOException
81      */
82     private void unzip(ZipFile zipfile, ZipEntry zipentry, String destPath) throws IOException {
83         byte buf[] = new byte[1024];
84         InputStream is = zipfile.getInputStream(zipentry);
85         String outFileName = destPath + File.separator + zipentry.getName();
86         File file = new File(outFileName);
87         if(!zipentry.isDirectory()) {
88             file.getParentFile().mkdirs();
89             if(!file.exists())
90                 file.createNewFile();
91             FileOutputStream fos = new FileOutputStream(file);
92             int i = is.read(buf, 0, 1024);
93             while(i > -1) {
94                 fos.write(buf, 0, i);
95                 i = is.read(buf, 0, 1024);
96             }
97             fos.close();
98             is.close();
99         } else {
100             file.mkdirs();
101         }
102     }
103
104   
105 }