java解压zip和rar并解决乱码问题

1.java解压zip格式的文件比较简单,直接上代码

​
/**
	 * 解压zpi文件
	 * @param zipPath
	 * @param descDir
	 * @return 返回解压之后的文件名称集合
	 * @throws IOException
	 */
	  public static List<String> ZipFiles(String zipPath,String descDir)throws IOException{
	   List<String> list= unZipFiles(new File(zipPath), descDir);
	   return list;
	  }
	  
	  @SuppressWarnings("all")
	  private static List<String> unZipFiles(File zipFile,String descDir)throws IOException{
		  List<String> list=new ArrayList<String>();
		  File pathFile = new File(descDir);
	    if(!pathFile.exists())
	    {
	      pathFile.mkdirs();
	    }
	    //解决zip文件中有中文目录或者中文文件
	    ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
	    for(Enumeration entries = zip.entries(); entries.hasMoreElements();){
	      ZipEntry entry = (ZipEntry)entries.nextElement();
	      String zipEntryName = entry.getName();
	      InputStream in = zip.getInputStream(entry);
	      String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
	      //输出文件路径信息
	      list.add(zipEntryName);
	      //判断路径是否存在,不存在则创建文件路径
	      File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
	      if(!file.exists()){
	        file.mkdirs();
	      }
	      //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
	      if(new File(outPath).isDirectory()){
	        continue;
	      }
	      
	      OutputStream out = new FileOutputStream(outPath);
	      byte[] buf1 = new byte[1024];
	      int len;
	      while((len=in.read(buf1))>0)
	      {
	        out.write(buf1,0,len);
	      }
	      in.close();
	      out.close();
	    }
	    return list;
	  }

​

2.解压rar格式的文件,解压rar格式文件需要引入两个jar包  解压rar格式的文件的时候比较容易出现乱码的问题,下面完美的解决乱码的问题

java-unrar-0.5.jar
http://www.java2s.com/Code/JarDownload/java/java-unrar-0.5.jar.zip
apache-commons-logging.jar
http://www.java2s.com/Code/JarDownload/apache-commons/apache-commons-logging.jar.zip

 /**
	   * 解压RAR格式 
	   * @param srcRarPath
	   * @param dstDirectoryPath
	   * @return
	   */
	  public static List<String> RarFiles(String srcRarPath, String dstDirectoryPath) {
		  List<String> list=new ArrayList<String>();
		  if (!srcRarPath.toLowerCase().endsWith(".rar")) {
				System.out.println("非rar文件!");
				return list;
			}
			File dstDiretory = new File(dstDirectoryPath);
			if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹
				dstDiretory.mkdirs();
			}
			Archive a = null;
			try {
				a = new Archive(new File(srcRarPath));
				if (a != null) {
					// a.getMainHeader().print(); // 打印文件信息.
					FileHeader fh = a.nextFileHeader();
					while (fh != null) {
						// 防止文件名中文乱码问题的处理
						String fileName = fh.getFileNameW().isEmpty() ? fh
								.getFileNameString() : fh.getFileNameW();
								list.add(fileName);
						if (fh.isDirectory()) { // 文件夹
							File fol = new File(dstDirectoryPath + File.separator
									+ fileName);
							fol.mkdirs();
						} else { // 文件
							File out = new File(dstDirectoryPath + File.separator
									+ fileName.trim());
							try {
								if (!out.exists()) {
									if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录.
										out.getParentFile().mkdirs();
									}
									out.createNewFile();
								}
								FileOutputStream os = new FileOutputStream(out);
								a.extractFile(fh, os);
								os.close();
							} catch (Exception ex) {
								ex.printStackTrace();
							}
						}
						fh = a.nextFileHeader();
					}
					a.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return list;
		}

以上就是java解压两种格式的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值