本文来源:http://www.oschina.net/code/snippet_4873_4142

[代码] DirTraversal.java

package com.once;import java.io.File;import java.util.ArrayList;import java.util.LinkedList;/** *  文件夹遍历 * @author once * */public class DirTraversal {        //no recursion    public static LinkedList<File> listLinkedFiles(String strPath) {        LinkedList<File> list = new LinkedList<File>();        File dir = new File(strPath);        File file[] = dir.listFiles();        for (int i = 0; i < file.length; i++) {            if (file[i].isDirectory())                list.add(file[i]);            else                System.out.println(file[i].getAbsolutePath());        }        File tmp;        while (!list.isEmpty()) {            tmp = (File) list.removeFirst();            if (tmp.isDirectory()) {                file = tmp.listFiles();                if (file == null)                    continue;                for (int i = 0; i < file.length; i++) {                    if (file[i].isDirectory())                        list.add(file[i]);                    else                        System.out.println(file[i].getAbsolutePath());                }            } else {                System.out.println(tmp.getAbsolutePath());            }        }        return list;    }        //recursion    public static ArrayList<File> listFiles(String strPath) {        return refreshFileList(strPath);    }    public static ArrayList<File> refreshFileList(String strPath) {        ArrayList<File> filelist = new ArrayList<File>();        File dir = new File(strPath);        File[] files = dir.listFiles();        if (files == null)            return null;        for (int i = 0; i < files.length; i++) {            if (files[i].isDirectory()) {                refreshFileList(files[i].getAbsolutePath());            } else {                if(files[i].getName().toLowerCase().endsWith("zip"))                    filelist.add(files[i]);            }        }        return filelist;    }}

[代码] ZipUtils.java

package com.once;import java.io.*;import java.util.ArrayList;import java.util.Collection;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;/** * Java utils 实现的Zip工具 * * @author once */public class ZipUtils {    private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte    /**     * 批量压缩文件(夹)     *     * @param resFileList 要压缩的文件(夹)列表     * @param zipFile 生成的压缩文件     * @throws IOException 当压缩过程出错时抛出     */    public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(                zipFile), BUFF_SIZE));        for (File resFile : resFileList) {            zipFile(resFile, zipout, "");        }        zipout.close();    }    /**     * 批量压缩文件(夹)     *     * @param resFileList 要压缩的文件(夹)列表     * @param zipFile 生成的压缩文件     * @param comment 压缩文件的注释     * @throws IOException 当压缩过程出错时抛出     */    public static void zipFiles(Collection<File> resFileList, File zipFile, String comment)            throws IOException {        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(                zipFile), BUFF_SIZE));        for (File resFile : resFileList) {            zipFile(resFile, zipout, "");        }        zipout.setComment(comment);        zipout.close();    }    /**     * 解压缩一个文件     *     * @param zipFile 压缩文件     * @param folderPath 解压缩的目标目录     * @throws IOException 当解压缩过程出错时抛出     */    public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {        File desDir = new File(folderPath);        if (!desDir.exists()) {            desDir.mkdirs();        }        ZipFile zf = new ZipFile(zipFile);        for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            InputStream in = zf.getInputStream(entry);            String str = folderPath + File.separator + entry.getName();            str = new String(str.getBytes("8859_1"), "GB2312");            File desFile = new File(str);            if (!desFile.exists()) {                File fileParentDir = desFile.getParentFile();                if (!fileParentDir.exists()) {                    fileParentDir.mkdirs();                }                desFile.createNewFile();            }            OutputStream out = new FileOutputStream(desFile);            byte buffer[] = new byte[BUFF_SIZE];            int realLength;            while ((realLength = in.read(buffer)) > 0) {                out.write(buffer, 0, realLength);            }            in.close();            out.close();        }    }    /**     * 解压文件名包含传入文字的文件     *     * @param zipFile 压缩文件     * @param folderPath 目标文件夹     * @param nameContains 传入的文件匹配名     * @throws ZipException 压缩格式有误时抛出     * @throws IOException IO错误时抛出     */    public static ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,            String nameContains) throws ZipException, IOException {        ArrayList<File> fileList = new ArrayList<File>();        File desDir = new File(folderPath);        if (!desDir.exists()) {            desDir.mkdir();        }        ZipFile zf = new ZipFile(zipFile);        for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            if (entry.getName().contains(nameContains)) {                InputStream in = zf.getInputStream(entry);                String str = folderPath + File.separator + entry.getName();                str = new String(str.getBytes("8859_1"), "GB2312");                // str.getBytes("GB2312"),"8859_1" 输出                // str.getBytes("8859_1"),"GB2312" 输入                File desFile = new File(str);                if (!desFile.exists()) {                    File fileParentDir = desFile.getParentFile();                    if (!fileParentDir.exists()) {                        fileParentDir.mkdirs();                    }                    desFile.createNewFile();                }                OutputStream out = new FileOutputStream(desFile);                byte buffer[] = new byte[BUFF_SIZE];                int realLength;                while ((realLength = in.read(buffer)) > 0) {                    out.write(buffer, 0, realLength);                }                in.close();                out.close();                fileList.add(desFile);            }        }        return fileList;    }    /**     * 获得压缩文件内文件列表     *     * @param zipFile 压缩文件     * @return 压缩文件内文件名称     * @throws ZipException 压缩文件格式有误时抛出     * @throws IOException 当解压缩过程出错时抛出     */    public static ArrayList<String> getEntriesNames(File zipFile) throws ZipException, IOException {        ArrayList<String> entryNames = new ArrayList<String>();        Enumeration<?> entries = getEntriesEnumeration(zipFile);        while (entries.hasMoreElements()) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            entryNames.add(new String(getEntryName(entry).getBytes("GB2312"), "8859_1"));        }        return entryNames;    }    /**     * 获得压缩文件内压缩文件对象以取得其属性     *     * @param zipFile 压缩文件     * @return 返回一个压缩文件列表     * @throws ZipException 压缩文件格式有误时抛出     * @throws IOException IO操作有误时抛出     */    public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException,            IOException {        ZipFile zf = new ZipFile(zipFile);        return zf.entries();    }    /**     * 取得压缩文件对象的注释     *     * @param entry 压缩文件对象     * @return 压缩文件对象的注释     * @throws UnsupportedEncodingException     */    public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException {        return new String(entry.getComment().getBytes("GB2312"), "8859_1");    }    /**     * 取得压缩文件对象的名称     *     * @param entry 压缩文件对象     * @return 压缩文件对象的名称     * @throws UnsupportedEncodingException     */    public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException {        return new String(entry.getName().getBytes("GB2312"), "8859_1");    }    /**     * 压缩文件     *     * @param resFile 需要压缩的文件(夹)     * @param zipout 压缩的目的文件     * @param rootpath 压缩的文件路径     * @throws FileNotFoundException 找不到文件时抛出     * @throws IOException 当压缩过程出错时抛出     */    private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath)            throws FileNotFoundException, IOException {        rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator)                + resFile.getName();        rootpath = new String(rootpath.getBytes("8859_1"), "GB2312");        if (resFile.isDirectory()) {            File[] fileList = resFile.listFiles();            for (File file : fileList) {                zipFile(file, zipout, rootpath);            }        } else {            byte buffer[] = new byte[BUFF_SIZE];            BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile),                    BUFF_SIZE);            zipout.putNextEntry(new ZipEntry(rootpath));            int realLength;            while ((realLength = in.read(buffer)) != -1) {                zipout.write(buffer, 0, realLength);            }            in.close();            zipout.flush();            zipout.closeEntry();        }    }}


更多相关文章

  1. Android字体设置
  2. android 多渠道打包,build.gradle文件配置、manifest文件配置
  3. android中的ListView的使用方法
  4. Android中的文件存储练习
  5. Android(安卓)SqlLite的简单实用
  6. Android固件img文件的解包, 修改和打包的命令行操作
  7. Android(安卓)开发中的常用的上传下载接口
  8. 类和 Json对象
  9. NPM 和webpack 的基础使用

随机推荐

  1. 最封闭的开源系统,话说Android的八宗罪(转
  2. UWP与Android中如何在多线程中刷新UI
  3. 在Android中实现Hook机制的实验
  4. 从0开始学Android之Android生命周期
  5. 曝Android机冷冻后变"傻" 加密数据随意访
  6. Android应用开发笔记(13): Android移动应
  7. 2016年10月Android岗校招笔试面试总结
  8. findlibrary returned null产生的联想,And
  9. 使用Vitamio打造自己的Android万能播放器
  10. Android项目开发,不能不了解的第三方库!(齐