Android应用中如何对文件进行压缩与解压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>使用场景强>
当我们在应用的资产目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩。又如当我们需要从服务器中下载文件时,如果下载源文件耗时又消耗流量,较大文件需要压缩,可以使得传输效率大大提高。下面我们就学习下基本的文件压缩和解压缩。Java中提供了压缩和解压缩的输入输出流
public static void zip (String src, String 桌子),throwsIOException {//才能定义压缩输出流 时间=ZipOutputStreamout 才能;零; try {才能 ,,,//传入源文件 ,,,File 外部档案=,newFile中(桌子); ,,,File fileOrDirectory=, newFile中(src); ,,,//传入压缩输出流 ,,,out =, newZipOutputStream (newFileOutputStream(输出文件); ,,,//判断是否是一个文件或目录 ,,,//如果是文件则压缩 ,,,if (fileOrDirectory.isFile ()) { ,,,,,zipFileOrDirectory (fileOrDirectory,,““); ,,,},{else ,,,,,//否则列出目录中的所有文件递归进行压缩 ,,,,,文件[]entries =, fileOrDirectory.listFiles (); ,,,,,for (int i=, 0;,小姐:& lt;, entries.length;我+ +),{ ,,,,,,,zipFileOrDirectory(条目,““); ,,,,,} ,,,} }才能赶上(IOException 交货),{ ,,,ex.printStackTrace (); 最后}{才能 ,,,if (!=, null) { ,,,,,try { ,,,,,,,out.close (); ,,,,,}捕捉(IOException 交货),{ ,,,,,,,ex.printStackTrace (); ,,,,,} ,,,} ,,} } private static  void zipFileOrDirectory (ZipOutputStream ,, File fileOrDirectory,, String curPath) throwsIOException { 时间=FileInputStreamin 才能;零; try {才能 ,,,//判断目录是否为null ,,,if (! fileOrDirectory.isDirectory ()) { ,,,,,byte[],缓冲=,new 字节[4096]; ,,,,,int bytes_read; ,,,,,,=,newFileInputStream (fileOrDirectory); ,,,,,//归档压缩目录 ,,,,,ZipEntryentry =, newZipEntry(时间+ curPath fileOrDirectory.getName ()); ,,,,,//将压缩目录写到输出流中 ,,,,,out.putNextEntry(入口); ,,,,,while ((bytes_read=, in.read(缓冲))!=,1),{ ,,,,,,,out.write(缓冲区,0,,bytes_read); ,,,,,} ,,,,,out.closeEntry (); ,,,},{else ,,,,,//列出目录中的所有文件 ,,,,,文件[]entries =, fileOrDirectory.listFiles (); ,,,,,for (int i=, 0;,小姐:& lt;, entries.length;我+ +),{ ,,,,,,,//递归压缩 ,,,,,,,zipFileOrDirectory(条目,curPath +, fileOrDirectory.getName () +,“/?; ,,,,,} ,,,} }才能赶上(IOException 交货),{ ,,,ex.printStackTrace (); 最后}{才能 ,,,if (在!=,null) { ,,,,,try { ,,,,,,,in.close (); ,,,,,}捕捉(IOException 交货),{ ,,,,,,,ex.printStackTrace (); ,,,,,} ,,,} ,,} }
上述代码存在问题,若文件压缩后仍然很大怎么办,换句话说文件压缩率低也是问题,java中也专门对Linux提供了高压缩率的输入输出流,其使用方法和上述代码相似。高压缩率输入输出流:(GZIPInputStream和GZIPOutputStream)
<强>文件压缩强>
public static void zip (File srcFile, File desFile) throwsIOException { 时间=GZIPOutputStreamzos 才能;零; 时间=FileInputStreamfis 才能;零; try {才能 ,,,//创建压缩输出流,将目标文件传入 ,,,zos =, newGZIPOutputStream (newFileOutputStream (desFile)); ,,,//创建文件输入流,将源文件传入 ,,,fis =, newFileInputStream (srcFile); ,,,byte[],缓冲=,new 字节[1024]; ,,,int len=, 1; ,,,//利用IO流写入写出的形式将源文件写入到目标文件中进行压缩 null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid应用中如何对文件进行压缩与解压缩