`

Android压缩文件(压缩目录)

 
阅读更多

 在Android中我们很多时候需要进行压缩与解压缩,就如本人的[ 足球即时比分 ]应用中也用到过.需要将一些信息进行收集再进行压缩,最后将压缩文件上传到服务器中(如何上传将文件上传到服务器中可以看我另一篇博文 :[ Android上传文件到服务器 ]).

  以下我的使用到的工具类的代码.需要注意的是,进行压缩与解压缩都不支持中文名,如果需要支持中文名的话,一般是使用 Ant中的ZipInputStream与ZipOutStream,由于手机上使用ant的jar包的话,会令应用或游戏的大小变大很多,所以尽量小引入其它第三方的jar包的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package rbase.app.nowscore.util;
 
import java.io.InputStream;
 
/**
 * Android Zip压缩解压缩
 * @author ronald (www.r-base.net)
 */
public final class ZipUtil {
  private ZipUtil(){
  }
 
  /**
   * 取得压缩包中的 文件列表(文件夹,文件自选)
   * @param zipFileString		压缩包名字
   * @param bContainFolder	是否包括 文件夹
   * @param bContainFile		是否包括 文件
   * @return
   * @throws Exception
   */
  public static java.util.List<java.io.File> getFileList(String zipFileString, boolean bContainFolder, 
          boolean bContainFile)throws Exception {
    java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();
    java.util.zip.ZipInputStream inZip = 
                     new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
    java.util.zip.ZipEntry zipEntry;
    String szName = "";		
    while ((zipEntry = inZip.getNextEntry()) != null) {
	szName = zipEntry.getName();
	if (zipEntry.isDirectory()) {
	  // get the folder name of the widget
	  szName = szName.substring(0, szName.length() - 1);
	  java.io.File folder = new java.io.File(szName);
	  if (bContainFolder) {
	    fileList.add(folder);
	  }
        } else {
	  java.io.File file = new java.io.File(szName);
	  if (bContainFile) {
	    fileList.add(file);
	  }
	}
    }//end of while		
    inZip.close();
    return fileList;
  }
 
  /**
   * 返回压缩包中的文件InputStream
   * 
   * @param zipFilePath		压缩文件的名字
   * @param fileString	解压文件的名字
   * @return InputStream
   * @throws Exception
   */
public static java.io.InputStream upZip(String zipFilePath, String fileString)throws Exception {
	java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFilePath);
	java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);
 
	return zipFile.getInputStream(zipEntry);
}
 
/**
 * 解压一个压缩文档 到指定位置
 * @param zipFileString	压缩包的名字
 * @param outPathString	指定的路径
 * @throws Exception
 */
public static void unZipFolder(InputStream input, String outPathString)throws Exception {
	java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(input);
	java.util.zip.ZipEntry zipEntry = null;
	String szName = "";
 
	while ((zipEntry = inZip.getNextEntry()) != null) {
		szName = zipEntry.getName();
 
		if (zipEntry.isDirectory()) {
		  // get the folder name of the widget
		  szName = szName.substring(0, szName.length() - 1);
		  java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
		  folder.mkdirs();
		} else {
		  java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
		  file.createNewFile();
		  // get the output stream of the file
		  java.io.FileOutputStream out = new java.io.FileOutputStream(file);
		  int len;
		  byte[] buffer = new byte[1024];
		  // read (len) bytes into buffer
		  while ((len = inZip.read(buffer)) != -1) {
			// write (len) byte from buffer at the position 0
			out.write(buffer, 0, len);
			out.flush();
		  }
		  out.close();
		}
	}//end of while
		inZip.close();
	}
 
	/**
	 * 解压一个压缩文档 到指定位置
	 * @param zipFileString	压缩包的名字
	 * @param outPathString	指定的路径
	 * @throws Exception
	 */
	public static void unZipFolder(String zipFileString, String outPathString)throws Exception {
		unZipFolder(new java.io.FileInputStream(zipFileString),outPathString);
	}//end of func
 
 
	/**
	 * 压缩文件,文件夹
	 * 
	 * @param srcFilePath	要压缩的文件/文件夹名字
	 * @param zipFilePath	指定压缩的目的和名字
	 * @throws Exception
	 */
	public static void zipFolder(String srcFilePath, String zipFilePath)throws Exception {
	  //创建Zip包
	  java.util.zip.ZipOutputStream outZip = 
              new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFilePath));
 
	  //打开要输出的文件
	  java.io.File file = new java.io.File(srcFilePath);
 
	  //压缩
	  zipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);
 
	  //完成,关闭
	  outZip.finish();
          outZip.close();
 
        }//end of func
 
	/**
	 * 压缩文件
	 * @param folderPath
	 * @param filePath
	 * @param zipOut
	 * @throws Exception
	 */
	private static void zipFiles(String folderPath, String filePath, 
                     java.util.zip.ZipOutputStream zipOut)throws Exception{
	  if(zipOut == null){
	    return;
	  }
 
	  java.io.File file = new java.io.File(folderPath+filePath);
 
	  //判断是不是文件
	  if (file.isFile()) {
	    java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(filePath);
	    java.io.FileInputStream inputStream = new java.io.FileInputStream(file);
	    zipOut.putNextEntry(zipEntry);
 
	    int len;
	    byte[] buffer = new byte[4096];
 
	    while((len=inputStream.read(buffer)) != -1) {
	 	zipOut.write(buffer, 0, len);
	    }
 
	     zipOut.closeEntry();
	  } else {
	   //文件夹的方式,获取文件夹下的子文件
	   String fileList[] = file.list();
 
	   //如果没有子文件, 则添加进去即可
	   if (fileList.length <= 0) {
	  	java.util.zip.ZipEntry zipEntry =  
                       new java.util.zip.ZipEntry(filePath+java.io.File.separator);
		zipOut.putNextEntry(zipEntry);
		zipOut.closeEntry();				
	   }
 
	   //如果有子文件, 遍历子文件
	   for (int i = 0; i < fileList.length; i++) {
		zipFiles(folderPath, filePath+java.io.File.separator+fileList[i], zipOut);
	   }//end of for
 
         }//end of if
 
     }//end of func
}

 

文件下载 : ZipUtil.java.zip

 

 

 

转载请注明转自 : http://www.r-base.net/archives/404

分享到:
评论

相关推荐

    androidstudio视频文件压缩Demo

    本示例“androidstudio视频文件压缩Demo”提供了一个详细的解决方案,它演示了如何在Android Studio项目中实现视频文件的压缩,并且还带有进度条反馈,让用户能够了解压缩过程的实时状态。以下是对这个Demo的深入...

    android 压缩 解压缩

    4. **解压缩文件**:另一个关键方法可能是`unzipToDir()`,它接收一个ZIP文件路径和目标解压缩目录。`ZipInputStream`可以从ZIP文件中读取每个条目(entry),然后用`FileOutputStream`将内容写入目标目录。 5. **...

    Android 解压缩文件

    Android解压缩文件。Android原生的解压缩文件,使用时提供保存的路径即可

    android jni使用libzip读取压缩文件

    在Android环境中,通过JNI调用libzip库可以实现原生层对ZIP文件的操作,这在处理大量数据或者需要高效读取压缩文件的场景下非常有用。 首先,你需要在Android项目的jniLibs目录下添加libzip库的.so文件,确保它们...

    Android代码-字体文件压缩神器

    &gt;可用作APK字体压缩 用于提取仅需要的美化文字,来压缩assets下的字体文件大小。 Download FontZip.jar FontZip32.exe FontZip64.exe 历史版本和其他下载链 Gif FontZip2 使用说明: Windows下运行run.bat,选...

    Android zip文件压缩解压

    在Android平台上,对zip文件进行压缩和解压是常见...理解这些工具的使用和工作原理,对于开发者来说,是实现文件压缩和解压功能的基础。在实际开发中,要结合项目需求,合理选择并优化相关操作,以提供更好的用户体验。

    Android将assets中的zip压缩文件解压到SD卡

    在Android开发中,有时我们需要将应用内部的资源文件,如ZIP压缩文件,解压到外部存储(即SD卡)上,以便用户可以访问或使用这些数据。本文将详细讲解如何实现这一功能,主要涉及Android权限管理、文件操作以及ZIP...

    java android zip解压缩(解决压缩中文乱码问题)

    在Android开发中,处理压缩文件是一项常见的任务,尤其是在下载、更新或者备份数据时。然而,当压缩文件包含中文字符时,解压缩过程中可能会遇到乱码问题。这是因为编码格式不匹配或者处理方式不当导致的。本篇文章...

    Android-CompressHelper压缩文件压缩图片压缩Bitmap

    1. **文件压缩(CompressFile)**:这个功能允许开发者将大型文件压缩为更小的尺寸,以节省存储空间和网络传输时间。它可能采用常见的压缩算法如Gzip或Zip,通过读取文件内容,将其编码并写入新的压缩文件中。压缩...

    android 本地视频压缩

    在Android平台上进行本地视频压缩是一项常见的任务,尤其在开发视频编辑应用时,高效且占用空间小的压缩技术显得尤为重要。本篇文章将详细讲解如何利用Android的API和其他第三方库,如CommonVideoLibrary,来实现这...

    android质量压缩.so文件

    http://blog.csdn.net/oLimxing/article/details/50788014 质量压缩相关文章 欢迎访问博主github:https://github.com/limxing 欢迎点星

    android Zip压缩-删除文件-Gson解析Json

    在Android中,我们经常需要对文件或目录进行压缩,以减少存储空间或便于传输。Android SDK提供了java.util.zip包,其中的ZipOutputStream类可以帮助我们完成这个任务。首先,我们需要创建一个ZipOutputStream对象,...

    android 视频压缩

    在Android平台上,视频压缩是一项重要的任务,特别是在移动设备上,因为有限的存储空间和网络带宽使得高效的数据处理成为必需。本节将深入探讨如何在Android应用中实现视频压缩,从相册选取视频并将其压缩至360k,...

    Android 在线下载压缩包并解压到指定目录.zip

    首先,创建一个`ZipInputStream`,传入下载好的压缩文件的输入流。然后,遍历`ZipInputStream`,每次读取一个`ZipEntry`,创建对应的`FileOutputStream`,并将`ZipInputStream`的数据写入到新的文件。 6. **指定...

    Android图片压缩解决方案,解决图片加载过程中ANR现象

    在Android应用开发中,图片加载是常见的操作,但由于图片文件大小不一,如果处理不当,可能会导致内存溢出(OOM)或应用程序无响应(ANR)等问题。本解决方案旨在探讨如何有效压缩Android中的图片,避免ANR现象,...

    android数据压缩与解压

    ZIP是一种广泛使用的文件压缩格式,它可以将多个文件或目录打包成一个单一的文件,方便存储和传输。ZIP文件内部包含了一个或多个经过压缩的数据块,每个数据块对应原始文件的一部分。 2. **Android API支持** ...

    java、android解压缩Assert文件夹下的压缩文件

    通过调用UnzipUtils下面的UnzipUtils.createFile&#40;locationZip&#41;;UnzipUtils.copyBigDataToSD(MainActivity.this, locationZip, ZIP_NAME);UnzipUtils.upZipFile&#40;new File(locationZip&#41;...

    videocompressor_android视频压缩工具包_VideoCompressor_

    《Android视频压缩技术详解——VideoCompressor工具包的运用与实践》 在移动应用开发领域,尤其是涉及到多媒体内容分享的应用,视频压缩是一项至关重要的技术。本文将深入探讨Android平台上的视频压缩工具包——...

    Android图片压缩工具Luban(鲁班).zip

    Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略。项目描述目前做app开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多...

    Android视频压缩并且上传

    以上就是从相册选取视频、压缩视频并上传到服务器的Android开发中涉及的主要知识点,涵盖了多媒体文件访问、解码、压缩、网络传输等多个方面。在实际开发中,要根据具体需求和平台特性进行适当调整和优化。

Global site tag (gtag.js) - Google Analytics