Java 上传解压zip文件,并且解析文件里面的excel和图片

需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中。

PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面。这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型。这两个类型在解析文件的时候还是有点区别的。

第①个方法:

 1     /**
 2      * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型
 3      * @param file (zip)
 4      * @param request
 5      * @param response
 6      * @return
 7      * @throws Exception
 8      */
 9     @PostMapping("/addPersonsFileOfZip")
10     public String addPersonsFileOfZip(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
11         String createdId = request.getParameter(KEY_CREATED_ID);
12         //正常上这里需要检查一下createdId是否为空
13
14         //原则上这个uploadZipFilesAndParse方法需要写到service和serviceImpl中
15         String result =uploadZipFilesAndParse(file,createdId);
16         return  result;
17     }

第②个方法:

 1     /**
 2      *返回的是批次号
 3      *同时我另外开了线程处理zip文件里面的图片和excel,
 4      */
 5     @Override
 6     public String uploadZipFilesAndParse(MultipartFile file, String createdId) throws Exception {
 7         String filename = file.getOriginalFilename();
 8         String fileType = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(Locale.US);
 9         String uuid = UUID.randomUUID().toString();
10         //判断文件是不是zip类型
11         if(fileType.equals("zip")){
12
13             //FileConfig.localtion是配置文件和config类生产的,我会在评论区附上这些代码,测试demo的时候大家可以直接把FileConfig.localtion替换成D:/test
14             //String desPath = FileConfig.localtion + File.separator + uuid.replaceAll("-", "");
15             String desPath = "D:/test" + File.separator + uuid.replaceAll("-", "");
16
17
18             //下面这三行的代码就是把上传文件copy到服务器,一定不要遗漏了。
19             //遗漏了这个代码,在本地测试环境不会出问题,在服务器上一定会报没有找到文件的错误
20             String savePath = FileConfig.localtion + File.separator;
21             File savefile = new File(savePath+filename);
22             file.transferTo(savefile);
23
24             FileUtil fileUtil = new FileUtil();
25             //解压zip文件,我是写在公共类里面,FileUtil类代码评论区见
26             FileUtil.unZip(file, desPath,savePath);
27             new Thread(new Runnable() {
28                 @Override
29                 public void run() {
30                     List<File> fileList = new ArrayList<>();
31                     fileList = fileUtil.getSubFiles(desPath,fileList);
32                         for (File oneFile : fileList){
33                             if (oneFile.getName().toLowerCase().endsWith(".xls") || oneFile.getName().toLowerCase().endsWith(".xlsx") ) {
34                                 try {
35                                     //解析处理excel文件
36                                     parseExcelFile(oneFile,createdId,uuid);
37                                 } catch (Exception e) {
38                                     LogUtils.error(e.getMessage());
39                                 }
40                             }else if(oneFile.getName().toLowerCase().endsWith(".jpg")) {
41                                 try {
42                                     //解析处理图片文件
43                                     parseImageFile(oneFile,createdId,uuid);
44                                 } catch (Exception e) {
45                                     LogUtils.error(e.getMessage());
46                                 }
47                             }
48                         }
49
50                         //最后要删除文件,删除文件的方法见评论区FileUtil类
51                         FileUtil.clearFiles(desPath);
52
53                 }
54             }).start();
55
56         }
57         return uuid;
58     }    

第③个方法:解压zip文件的unzip方法

 1     public static void unZip(MultipartFile  srcFile, String destDirPath,String savePath) throws RuntimeException, IOException {
 2         long startTime = System.currentTimeMillis();
 3
 4         File file = null;
 5         InputStream ins = srcFile.getInputStream();
 6         file=new File(savePath+srcFile.getOriginalFilename());
 7         LogUtils.info("MultipartFile transform to File,MultipartFile name:"+srcFile.getOriginalFilename());
 8         inputStreamToFile(ins, file);
 9
10         if (!file.exists()) {
11             throw new RuntimeException(file.getPath() + ",file is not found");
12         }
13         ZipFile zipFile = null;
14         try {
15             zipFile = new ZipFile(file);
16             Enumeration<?> entries = zipFile.entries();
17             while (entries.hasMoreElements()) {
18                 ZipEntry entry = (ZipEntry) entries.nextElement();
19                 LogUtils.info("zipFile context name:"+entry.getName());
20                 if (entry.isDirectory()) {
21                     String dirPath = destDirPath + File.separator+ entry.getName();
22                     File dir = new File(dirPath);
23                     dir.mkdirs();
24                 }else {
25                     File targetFile = new File(destDirPath + File.separator + entry.getName());
26                     targetFile.setExecutable(true);
27                     if(!targetFile.getParentFile().exists()){
28                         targetFile.getParentFile().mkdirs();
29                     }
30                     targetFile.createNewFile();
31                     InputStream is = zipFile.getInputStream(entry);
32                     FileOutputStream fos = new FileOutputStream(targetFile);
33                     int len;
34                     byte[] buf = new byte[1024];
35                     while ((len = is.read(buf)) != -1) {
36                         fos.write(buf, 0, len);
37                     }
38                     fos.close();
39                     is.close();
40                 }
41             }
42             long endTime = System.currentTimeMillis();
43             LogUtils.info("unZip time-->" + (endTime - startTime) + " ms");
44         }catch(Exception e) {
45             throw new RuntimeException("unzip error from FileUtil", e);
46         } finally {
47             if(zipFile != null){
48                 try {
49                     zipFile.close();
50                 } catch (IOException e) {
51                     e.printStackTrace();
52                 }
53             }
54
55             //MultipartFile change to file may create a temp file in the project root folder(delete the temp file)
56             File del = new File(file.toURI());
57             del.delete();
58         }
59     }

第④个方法:unzip方法中的inputStreamToFile方法,这个方法的目的是把MultipartFile转成File类型,但是会在项目根目录下生成一个临时文件,切记要删除

 1     private static void inputStreamToFile(InputStream ins, File file) {
 2         try {
 3             OutputStream os = new FileOutputStream(file);
 4             int bytesRead = 0;
 5             byte[] buffer = new byte[8192];
 6             while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
 7                 os.write(buffer, 0, bytesRead);
 8             }
 9             os.close();
10             ins.close();
11             LogUtils.info("MultipartFile transform to File completed!");
12         }catch(Exception e) {
13             e.printStackTrace();
14         }
15     }

第⑤个方法:parseExcelFile方法是解析excel的方法,里面包括我自己项目的逻辑处理,大家可以删除这些代码,只保留解析excel的代码就好

 1     private void parseExcelFile(File file,String createdId,String uuid) throws Exception {
 2
 3         LogUtils.info("file name:"+file.getName());
 4         FileInputStream is = new FileInputStream(file);
 5         Workbook workbook = WorkbookFactory.create(is);
 6         Sheet sheet = workbook.getSheetAt(0);
 7
 8         int firstRowIndex = sheet.getFirstRowNum() + 1;
 9         int lastRowIndex = sheet.getLastRowNum();
10
11         List<VapBatchPersonInfo> batchPersonList = new ArrayList<>();
12         for (int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {
13
14             VapBatchPersonInfo vapBatchPersonInfo  = new VapBatchPersonInfo();
15             Row row = sheet.getRow(rIndex);
16             if (row != null) {
17                 int firstCellIndex = row.getFirstCellNum();
18                 int lastCellIndex = row.getLastCellNum();
19                 JSONObject jsonObject = new JSONObject();
20                 jsonObject.put(KEY_CREATED_ID, createdId);
21
22                 Cell resultCell = row.createCell(lastCellIndex);
23                 Cell msgCell = row.createCell(lastCellIndex + 1);
24                 Boolean flag = false;
25                 for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) {
26                     Cell cell = row.getCell(cIndex);
27                     String titleName = sheet.getRow(0).getCell(cIndex).toString();
28                     String checkTitleName = checkTitleName(cIndex, titleName);
29                     if (!"SUCCESS".equals(checkTitleName)) {
30                         msgCell.setCellValue(checkTitleName);
31                         resultCell.setCellValue("Failed");
32                         flag = true;
33                         break;
34                     }
35                     if (cell != null) {
36                         cell.setCellType(CellType.STRING);
37                         jsonObject.put(titleName, cell.toString());
38                     }
39
40                 }
41                 if (flag) {
42                     rIndex = 0;
43                     lastRowIndex = 0;
44                 } else {
45                     vapBatchPersonInfo.setBatchNo(uuid);
46                     vapBatchPersonInfo.setName(jsonObject.getString("fullName"));
47                     vapBatchPersonInfo.setImageName(jsonObject.getString("imageName"));
48                     vapBatchPersonInfo.setConfidenceThreshold(jsonObject.getString("confidenceThreshold"));
49                     vapBatchPersonInfo.setCreatedId(jsonObject.getString("createdId"));
50                     vapBatchPersonInfo.setIdentityNo(jsonObject.getString("identityNo"));
51                     vapBatchPersonInfo.setCreatedDate(new Date());
52                     vapBatchPersonInfo.setLastUpdatedId(jsonObject.getString("createdId"));
53                     vapBatchPersonInfo.setLastUpdatedDate(new Date());
54                     vapBatchPersonInfo.setStatus(TaskStatus.RUNNING);
55                     batchPersonList.add(vapBatchPersonInfo);
56                 }
57             }
58         }
59         batchPersonInfoRepository.saveAll(batchPersonList);
60
61     }

第⑥个方法:parseImageFile方法是解析图片的方法

 1     private void parseImageFile(File file, String createdId, String uuid) throws Exception {
 2
 3         String imgStr ="";
 4         FileInputStream fis = new FileInputStream(file);
 5         byte[] buffer = new byte[(int) file.length()];
 6         int offset = 0;
 7         int numRead = 0;
 8         while (offset < buffer.length && (numRead = fis.read(buffer, offset, buffer.length - offset)) >= 0) {
 9             offset += numRead;
10         }
11         if (offset != buffer.length) {
12             throw new IOException("Could not completely read file " + file.getName());
13         }
14         fis.close();
15         Base64 encoder = new Base64();
16         imgStr = Base64.encodeBase64String(buffer);
17         imgStr.length();
18         LogUtils.info("file name:"+file.getName());
19 //        LogUtils.info("file imgStr:"+imgStr);
20 //        LogUtils.info("file imgStr.length:"+imgStr.length());
21
22     }

最后附上FileConfig和FileUtil的代码

FileConfig代码:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 *Jun 12, 2019
 *
 * FileConfig.java
 */
@ConfigurationProperties(prefix = "upload")
@Component
@Order
public class FileConfig {

    public static String localtion;
    public static String maxFileSize;
    public static String maxRequestSize;    

    /**
     * @param localtion the localtion to set
     */
    public void setLocaltion(String localtion) {
        FileConfig.localtion = localtion;
    }

    /**
     * @param maxFileSize the maxFileSize to set
     */
    public void setMaxFileSize(String maxFileSize) {
        FileConfig.maxFileSize = maxFileSize;
    }

    /**
     * @param maxRequestSize the maxRequestSize to set
     */
    public void setMaxRequestSize(String maxRequestSize) {
        FileConfig.maxRequestSize = maxRequestSize;
    }

}

FileConfig类里面读取的配置文件信息:

配置文件类型是yml,大家也可以自己改成properties文件格式

upload:
  #localtion: ${UPLOAD_DIR:/home/data/test}
  localtion: ${UPLOAD_DIR:D:/test}
  maxFileSize: 10240KB
  maxRequestSize: 102400KB  

FileUtil类的代码:

  1 import java.io.*;
  2 import java.nio.channels.FileChannel;
  3 import java.nio.file.Files;
  4 import java.nio.file.Path;
  5 import java.nio.file.Paths;
  6 import java.nio.file.attribute.PosixFilePermission;
  7 import java.util.ArrayList;
  8 import java.util.Enumeration;
  9 import java.util.HashSet;
 10 import java.util.List;
 11 import java.util.Set;
 12 import java.util.zip.ZipEntry;
 13 import java.util.zip.ZipFile;
 14
 15 import org.springframework.web.multipart.MultipartFile;
 16
 17 import sg.com.mha.ummi.common.util.LogUtils;
 18
 19
 20 public class FileUtil {
 21
 22     public static void clearFiles(String workspaceRootPath) {
 23         File file = new File(workspaceRootPath);
 24         deleteFile(file);
 25     }
 26
 27     public static void deleteFile(File file) {
 28         if (file.exists()) {
 29             if (file.isDirectory()) {
 30                 File[] files = file.listFiles();
 31                 for (int i = 0; i < files.length; i++) {
 32                     deleteFile(files[i]);
 33                 }
 34             }
 35         }
 36         file.delete();
 37     }
 38
 39     public static void fileWrite(String str, String fileNamePath) throws IOException {
 40         FileWriter writer = null;
 41         try {
 42             File file = new File(fileNamePath);
 43             if (!file.getParentFile().exists()) {
 44                 file.getParentFile().mkdirs();
 45                 file.createNewFile();
 46             }
 47             writer = new FileWriter(file, true);
 48             writer.write(str + System.getProperty("line.separator"));
 49
 50         } catch (IOException e) {
 51             LogUtils.error(e.getMessage());
 52         } finally {
 53             if (writer != null) {
 54                 writer.close();
 55             }
 56         }
 57     }
 58
 59     public static void changePermission(File dirFile, int mode) throws IOException {
 60         char[] modes = Integer.toOctalString(mode).toCharArray();
 61         if (modes.length != 3) {
 62             return;
 63         }
 64         Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
 65         switch (modes[0]) {
 66             case ‘1‘:
 67                 perms.add(PosixFilePermission.OWNER_EXECUTE);
 68                 break;
 69             case ‘2‘:
 70                 perms.add(PosixFilePermission.OWNER_WRITE);
 71                 break;
 72             case ‘4‘:
 73                 perms.add(PosixFilePermission.OWNER_READ);
 74                 break;
 75             case ‘5‘:
 76                 perms.add(PosixFilePermission.OWNER_READ);
 77                 perms.add(PosixFilePermission.OWNER_EXECUTE);
 78                 break;
 79             case ‘6‘:
 80                 perms.add(PosixFilePermission.OWNER_READ);
 81                 perms.add(PosixFilePermission.OWNER_WRITE);
 82                 break;
 83             case ‘7‘:
 84                 perms.add(PosixFilePermission.OWNER_READ);
 85                 perms.add(PosixFilePermission.OWNER_WRITE);
 86                 perms.add(PosixFilePermission.OWNER_EXECUTE);
 87                 break;
 88
 89             default:
 90                 break;
 91         }
 92         switch (modes[1]) {
 93             case ‘1‘:
 94                 perms.add(PosixFilePermission.GROUP_EXECUTE);
 95                 break;
 96             case ‘2‘:
 97                 perms.add(PosixFilePermission.GROUP_WRITE);
 98                 break;
 99             case ‘4‘:
100                 perms.add(PosixFilePermission.GROUP_READ);
101                 break;
102             case ‘5‘:
103                 perms.add(PosixFilePermission.GROUP_READ);
104                 perms.add(PosixFilePermission.GROUP_EXECUTE);
105                 break;
106             case ‘6‘:
107                 perms.add(PosixFilePermission.GROUP_READ);
108                 perms.add(PosixFilePermission.GROUP_WRITE);
109                 break;
110             case ‘7‘:
111                 perms.add(PosixFilePermission.GROUP_READ);
112                 perms.add(PosixFilePermission.GROUP_WRITE);
113                 perms.add(PosixFilePermission.GROUP_EXECUTE);
114                 break;
115             default:
116                 break;
117         }
118         switch (modes[2]) {
119             case ‘1‘:
120                 perms.add(PosixFilePermission.OTHERS_EXECUTE);
121                 break;
122             case ‘2‘:
123                 perms.add(PosixFilePermission.OTHERS_WRITE);
124                 break;
125             case ‘4‘:
126                 perms.add(PosixFilePermission.OTHERS_READ);
127                 break;
128             case ‘5‘:
129                 perms.add(PosixFilePermission.OTHERS_EXECUTE);
130                 perms.add(PosixFilePermission.OTHERS_READ);
131                 break;
132             case ‘6‘:
133                 perms.add(PosixFilePermission.OTHERS_READ);
134                 perms.add(PosixFilePermission.OTHERS_WRITE);
135                 break;
136             case ‘7‘:
137                 perms.add(PosixFilePermission.OTHERS_EXECUTE);
138                 perms.add(PosixFilePermission.OTHERS_READ);
139                 perms.add(PosixFilePermission.OTHERS_WRITE);
140                 break;
141             default:
142                 break;
143         }
144
145         try {
146             Path path = Paths.get(dirFile.getAbsolutePath());
147             Files.setPosixFilePermissions(path, perms);
148         } catch (Exception e) {
149             e.printStackTrace();
150         }
151     }
152
153     public static File mkFile(String fileName) {
154         File f = new File(fileName);
155         try {
156             if (f.exists()) {
157                 f.delete();
158             }
159             f.createNewFile();
160         } catch (IOException e) {
161             e.printStackTrace();
162         }
163         return f;
164     }
165
166
167     public static void copyDirAndFile(String oldPath, String newPath) throws IOException {
168         if (!(new File(newPath)).exists()) {
169             (new File(newPath)).mkdir();
170         }
171         File file = new File(oldPath);
172         //file name list
173         String[] filePaths = file.list();
174         for (String filePath : filePaths) {
175             String oldFullPath = oldPath + file.separator + filePath;
176             String newFullPath = newPath + file.separator + filePath;
177             File oldFile = new File(oldFullPath);
178             File newFile = new File(newFullPath);
179             if (oldFile.isDirectory()) {
180                 copyDirAndFile(oldFullPath, newFullPath);
181             } else if (oldFile.isFile()) {
182                 copyFile(oldFile, newFile);
183             }
184         }
185     }
186
187     public static void copyFile(File source, File dest) throws IOException {
188         FileChannel inputChannel = null;
189         FileChannel outputChannel = null;
190         try {
191             inputChannel = new FileInputStream(source).getChannel();
192             outputChannel = new FileOutputStream(dest).getChannel();
193             outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
194         } finally {
195             inputChannel.close();
196             outputChannel.close();
197         }
198     }
199
200     /**
201      * @author panchaoyuan
202      * @param srcFile    Unzipped file
203      * @param destDirPath   Unzipped destination folder
204      * @throws RuntimeException
205      * @throws IOException
206      */
207     public static void unZip(MultipartFile  srcFile, String destDirPath,String savePath) throws RuntimeException, IOException {
208         long startTime = System.currentTimeMillis();
209
210         File file = null;
211         InputStream ins = srcFile.getInputStream();
212         file=new File(savePath+srcFile.getOriginalFilename());
213         LogUtils.info("MultipartFile transform to File,MultipartFile name:"+srcFile.getOriginalFilename());
214         inputStreamToFile(ins, file);
215
216         if (!file.exists()) {
217             throw new RuntimeException(file.getPath() + ",file is not found");
218         }
219         ZipFile zipFile = null;
220         try {
221             zipFile = new ZipFile(file);
222             Enumeration<?> entries = zipFile.entries();
223             while (entries.hasMoreElements()) {
224                 ZipEntry entry = (ZipEntry) entries.nextElement();
225                 LogUtils.info("zipFile context name:"+entry.getName());
226                 if (entry.isDirectory()) {
227                     String dirPath = destDirPath + File.separator+ entry.getName();
228                     File dir = new File(dirPath);
229                     dir.mkdirs();
230                 }else {
231                     File targetFile = new File(destDirPath + File.separator + entry.getName());
232                     targetFile.setExecutable(true);
233                     if(!targetFile.getParentFile().exists()){
234                         targetFile.getParentFile().mkdirs();
235                     }
236                     targetFile.createNewFile();
237                     InputStream is = zipFile.getInputStream(entry);
238                     FileOutputStream fos = new FileOutputStream(targetFile);
239                     int len;
240                     byte[] buf = new byte[1024];
241                     while ((len = is.read(buf)) != -1) {
242                         fos.write(buf, 0, len);
243                     }
244                     fos.close();
245                     is.close();
246                 }
247             }
248             long endTime = System.currentTimeMillis();
249             LogUtils.info("unZip time-->" + (endTime - startTime) + " ms");
250         }catch(Exception e) {
251             throw new RuntimeException("unzip error from FileUtil", e);
252         } finally {
253             if(zipFile != null){
254                 try {
255                     zipFile.close();
256                 } catch (IOException e) {
257                     e.printStackTrace();
258                 }
259             }
260
261             //MultipartFile change to file may create a temp file in the project root folder(delete the temp file)
262             File del = new File(file.toURI());
263             del.delete();
264         }
265     }
266
267     /**
268      * MultipartFile changed to File
269      * @author panchaoyuan
270      * @return
271      */
272     private static void inputStreamToFile(InputStream ins, File file) {
273         try {
274             OutputStream os = new FileOutputStream(file);
275             int bytesRead = 0;
276             byte[] buffer = new byte[8192];
277             while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
278                 os.write(buffer, 0, bytesRead);
279             }
280             os.close();
281             ins.close();
282             LogUtils.info("MultipartFile transform to File completed!");
283         }catch(Exception e) {
284             e.printStackTrace();
285         }
286     }
287
288       /**
289      * @author panchaoyuan
290      */
291     public List<File> getSubFiles(String  desFile,List<File> fileList) {
292         File file = new File(desFile);
293         File[] files = file.listFiles();
294         for (File fileIndex : files) {
295             if (!fileIndex.exists()) {
296                 throw new NullPointerException("Cannot find " + fileIndex);
297             } else if (fileIndex.isFile()) {
298                 fileList.add(fileIndex);
299             } else {
300                 if (fileIndex.isDirectory()) {
301                     getSubFiles(fileIndex.getAbsolutePath(),fileList);
302                 }
303             }
304         }
305         return fileList;
306     }
307
308
309 }

水平有限,可能写得不是很完整,大家copy这些代码的时候有可能因为引入包的不同,不一定走得成功,如有疑问,在评论区联系本人,写得不好的地方也欢迎指正。

原文地址:https://www.cnblogs.com/jamespan23/p/11629663.html

时间: 2024-11-05 14:40:46

Java 上传解压zip文件,并且解析文件里面的excel和图片的相关文章

java 多线程上传解压文件

举个公司项目开发遇到的一个简单例子,用户上传压缩文件到服务器后,要对该压缩包进行两个操作,一是将该压缩包复制到指定目录,一是将该压缩包解压到另一指定目录,最终响应用户提示文件上传成功.如果压缩包很大的话,上传后进行的复制和解压功能也会占用很长时间,用户就会等待很长的时间.其实复制和解压的功能和用户操作没有直接关系,完全可以独立出来,其解决的思路如下: 当用户上传压缩文件完毕之后,我们立即创建两个线程,一是复制压缩文件的线程:二是解压压缩文件的线程.我们可以通过线程的构造方法把文件的信息传递给相应

mac通过自带的ssh连接Linux服务器并上传解压文件

需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: 一: mac连接linux服务器 输入命令连接Linux服务器: ssh [email protected] 其中: username为登录Linux服务器所需的用户名,ip为服务器的地址.默认端口号为22,如果要指定端口号,使用 -p port // 以下两种方式都可以 ssh [email p

Java解压ZIP、RAR文件

解压ZIP: maven地址: <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</version> </dependency> public static void unzipFile(String zipFileName) throws Exception { try { File f = new File(zip

android zip4j之--解压zip文件并实时显示解压进度

Zip文件是我们经常用到压缩文件格式,android中在进行网络请求大批量数据时,通常会采用传递zip文件,这样做即可以减少网络流量的消耗,加快请求的响应速度,又可以减少对存储空间的要求,所以当我们将zip文件读取回来的时候,如何解压就是一个要解决的问题,虽然java本身提供了zip相关的API,但不是很强大,所以我们采用apache开源组织的zip4j,通过这个jar包可以十分轻松的解压zip文件. 回到项目中去,项目中有个需求是从服务器请求杂志,请求回来后给读者展示,但是由于公司自己做的电子

edtftpj让Java上传FTP文件支持断点续传

在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传:或者想做类似迅雷下载类似的功能,文件太大,今天传一半,睡一觉去先,明天继续传. Java上传FTP文件,用的比较多的工具是apache的commons-net.如果想用commons-net实现FTP上传的断点续传还是有点麻烦. 除了commons-net之外,还有很多非常优秀的FTP工具,这里使用edtftpj这个工具来实现断点续传. 下载:ht

java 解压 zip 包并删除

需求是这样的,  在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip 包,以及 解压后的文件. 之前在网上找的解压的文件的代码,都存在同一个问题,就是解压之后,无法删除 zip 包.查百度说是 资源占用,可是我已经把所有的流都关闭了哇. 我把解压和删除分成两部分用 jUnit  测试:   第一次测试解压,并不删除包:第二次只删除包.我发现,解压方法和删除方法在同一个

基于Android下载并解压Zip文件,更新UI简单帮助类

类似于:http://blog.csdn.net/jarlen/article/details/44794031 下载文件: /** * 下载文件 * * @param down_url * @param output * @param tmpDir */ private void download(String down_url, File output, File tmpDir) { InputStream inputStream = null; OutputStream outputStr

在 Java 项目中解压7Zip特殊压缩算法文件

1 问题描述 Java Web 后端下载了一个经特殊算法压缩的 zip 文件,因为不能采用 java 本身自带的解压方式,必须采用 7Zip 来解压.所以,提到了本文中在 java web 后端调用外部 7zip exe 来解压文件的问题. 2 主要实现 2.1 定义缓冲区类 class StreamGobbler extends Thread { InputStream is; String type; public StreamGobbler(InputStream is, String t

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipAr