歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android zip文件壓縮解壓縮

Android zip文件壓縮解壓縮

日期:2017/3/1 10:36:12   编辑:Linux編程

Android zip文件壓縮解壓縮:

  1. /**
  2. * Android Zip壓縮解壓縮
  3. * @author Ren.xia
  4. * @version 1.0
  5. * @updated 26-七月-2010 13:04:27
  6. */
  7. public class XZip {
  8. public XZip(){
  9. }
  10. /**
  11. * 取得壓縮包中的 文件列表(文件夾,文件自選)
  12. * @param zipFileString 壓縮包名字
  13. * @param bContainFolder 是否包括 文件夾
  14. * @param bContainFile 是否包括 文件
  15. * @return
  16. * @throws Exception
  17. */
  18. public static java.util.List<java.io.File> GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {
  19. android.util.Log.v("XZip", "GetFileList(String)");
  20. java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();
  21. java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
  22. java.util.zip.ZipEntry zipEntry;
  23. String szName = "";
  24. while ((zipEntry = inZip.getNextEntry()) != null) {
  25. szName = zipEntry.getName();
  26. if (zipEntry.isDirectory()) {
  27. // get the folder name of the widget
  28. szName = szName.substring(0, szName.length() - 1);
  29. java.io.File folder = new java.io.File(szName);
  30. if (bContainFolder) {
  31. fileList.add(folder);
  32. }
  33. } else {
  34. java.io.File file = new java.io.File(szName);
  35. if (bContainFile) {
  36. fileList.add(file);
  37. }
  38. }
  39. }//end of while
  40. inZip.close();
  41. return fileList;
  42. }
  43. /**
  44. * 返回壓縮包中的文件InputStream
  45. * @param zipFileString 壓縮文件的名字
  46. * @param fileString 解壓文件的名字
  47. * @return InputStream
  48. * @throws Exception
  49. */
  50. public static java.io.InputStream UpZip(String zipFileString, String fileString)throws Exception {
  51. android.util.Log.v("XZip", "UpZip(String, String)");
  52. java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFileString);
  53. java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);
  54. return zipFile.getInputStream(zipEntry);
  55. }
  56. /**
  57. * 解壓一個壓縮文檔 到指定位置
  58. * @param zipFileString 壓縮包的名字
  59. * @param outPathString 指定的路徑
  60. * @throws Exception
  61. */
  62. public static void UnZipFolder(String zipFileString, String outPathString)throws Exception {
  63. android.util.Log.v("XZip", "UnZipFolder(String, String)");
  64. java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
  65. java.util.zip.ZipEntry zipEntry;
  66. String szName = "";
  67. while ((zipEntry = inZip.getNextEntry()) != null) {
  68. szName = zipEntry.getName();
  69. if (zipEntry.isDirectory()) {
  70. // get the folder name of the widget
  71. szName = szName.substring(0, szName.length() - 1);
  72. java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
  73. folder.mkdirs();
  74. } else {
  75. java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
  76. file.createNewFile();
  77. // get the output stream of the file
  78. java.io.FileOutputStream out = new java.io.FileOutputStream(file);
  79. int len;
  80. byte[] buffer = new byte[1024];
  81. // read (len) bytes into buffer
  82. while ((len = inZip.read(buffer)) != -1) {
  83. // write (len) byte from buffer at the position 0
  84. out.write(buffer, 0, len);
  85. out.flush();
  86. }
  87. out.close();
  88. }
  89. }//end of while
  90. inZip.close();
  91. }//end of func
  92. /**
  93. * 壓縮文件,文件夾
  94. * @param srcFileString 要壓縮的文件/文件夾名字
  95. * @param zipFileString 指定壓縮的目的和名字
  96. * @throws Exception
  97. */
  98. public static void ZipFolder(String srcFileString, String zipFileString)throws Exception {
  99. android.util.Log.v("XZip", "ZipFolder(String, String)");
  100. //創建Zip包
  101. java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFileString));
  102. //打開要輸出的文件
  103. java.io.File file = new java.io.File(srcFileString);
  104. //壓縮
  105. ZipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);
  106. //完成,關閉
  107. outZip.finish();
  108. outZip.close();
  109. }//end of func
  110. /**
  111. * 壓縮文件
  112. * @param folderString
  113. * @param fileString
  114. * @param zipOutputSteam
  115. * @throws Exception
  116. */
  117. private static void ZipFiles(String folderString, String fileString, java.util.zip.ZipOutputStream zipOutputSteam)throws Exception{
  118. android.util.Log.v("XZip", "ZipFiles(String, String, ZipOutputStream)");
  119. if(zipOutputSteam == null)
  120. return;
  121. java.io.File file = new java.io.File(folderString+fileString);
  122. //判斷是不是文件
  123. if (file.isFile()) {
  124. java.util.zip.ZipEntry zipEntry = new java.util.zip.ZipEntry(fileString);
  125. java.io.FileInputStream inputStream = new java.io.FileInputStream(file);
  126. zipOutputSteam.putNextEntry(zipEntry);
  127. int len;
  128. byte[] buffer = new byte[4096];
  129. while((len=inputStream.read(buffer)) != -1)
  130. {
  131. zipOutputSteam.write(buffer, 0, len);
  132. }
  133. zipOutputSteam.closeEntry();
  134. }
  135. else {
  136. //文件夾的方式,獲取文件夾下的子文件
  137. String fileList[] = file.list();
  138. //如果沒有子文件, 則添加進去即可
  139. if (fileList.length <= 0) {
  140. java.util.zip.ZipEntry zipEntry = new java.util.zip.ZipEntry(fileString+java.io.File.separator);
  141. zipOutputSteam.putNextEntry(zipEntry);
  142. zipOutputSteam.closeEntry();
  143. }
  144. //如果有子文件, 遍歷子文件
  145. for (int i = 0; i < fileList.length; i++) {
  146. ZipFiles(folderString, fileString+java.io.File.separator+fileList[i], zipOutputSteam);
  147. }//end of for
  148. }//end of if
  149. }//end of func
  150. public void finalize() throws Throwable {
  151. }
  152. }
Copyright © Linux教程網 All Rights Reserved