提取开源工具源码工具类

    下载了Lucene的源码,可是发现源码是在不同的工程中,一个个提取比较麻烦,这个也不是做为程序员应该做的事情,我们要做的是一劳永逸,说不定以后或者其它地方还有用呢!本来不打算贴出来的,因为太简单了,但是我担心自己以后要用的时候就找不到了,放到Blog里面,不容易搞丢。

    下面的是提取工具的源码,功能是提取Lucene源码工程目录下面的所有java源码,并打包成zip文件,然后可以直接将生成的zip源码加入到eclipse工程方面和class关联。代码写得比较死,如果读者有这方面的需要,需要参照实现修改一点点了。以下为所有实现的源码,需要注意一点的是,该实现要依赖于commons-io:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.FileUtils;

/**
 * 这个类依赖commons-io,使用FileUtils将lucene-4.6.0-src源码解压缩目录下面的所有java文件拷贝到一个目录中,并将其打成zip文件。<br>
 * 其它开源工具源码,需要参照相应的修改
 * 
 * @author fenglibin 2013-12-14 下午12:23:29
 */
public class GetProjectSource {

    private static final String BASE_SRC_DIR        = "F:\\download\\lucene-4.6.0-src";

    // Lucene的解压缩目录
    private static final String SRC_DIR             = BASE_SRC_DIR + "\\lucene-4.6.0";
    // 源文件目标目录,该目录需要自己创建
    private static final String DESC_DIR            = BASE_SRC_DIR + "\\java_sources";
    private static final File   DESC_DIR_FILE       = new File(DESC_DIR);
    private static final File   ZIP_SOURCE_FILE_DIR = new File(DESC_DIR + "\\org");
    private static final File   ZIP_OUTPUT_FILE     = new File(BASE_SRC_DIR + "\\lucene-4.6.0-src.zip");

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        findJavaDir(new File(SRC_DIR));
        createZip(ZIP_SOURCE_FILE_DIR, ZIP_OUTPUT_FILE);
    }

    private static void findJavaDir(File srcDir) throws IOException {
        File[] subFiles = srcDir.listFiles();
        if (subFiles != null) {
            for (File file : subFiles) {
                // java目录下面就是源码
                if (file.getName().equals("java")) {
                    FileUtils.copyDirectory(file, DESC_DIR_FILE);
                    break;
                }
                findJavaDir(file);
            }
        }
    }

    /**
     * 创建ZIP文件
     * 
     * @param sourcePath 文件或文件夹路径
     * @param zipPath 生成的zip文件存在路径(包括文件名)
     * @throws IOException
     */
    private static void createZip(File srcFileOrPath, File zipFile) throws IOException {
        ZipOutputStream zos = null;
        try {
            zos = new ZipOutputStream(new FileOutputStream(zipFile));
            writeZip(srcFileOrPath, "", zos);
        } finally {
            if (zos != null) {
                zos.close();
            }

        }
    }

    private static void writeZip(File file, String parentPath, ZipOutputStream zos) throws IOException {
        if (file.exists()) {
            if (file.isDirectory()) {// 处理文件夹,递归处理其中的文件
                parentPath += file.getName() + File.separator;
                File[] files = file.listFiles();
                for (File f : files) {
                    writeZip(f, parentPath, zos);
                }
            } else {
                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(file);
                    ZipEntry ze = new ZipEntry(parentPath + file.getName());
                    zos.putNextEntry(ze);
                    byte[] content = new byte[1024];
                    int len;
                    while ((len = fis.read(content)) != -1) {
                        zos.write(content, 0, len);
                        zos.flush();
                    }
                } finally {
                    if (fis != null) {
                        fis.close();
                    }
                }
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值