下载了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();
}
}
}
}
}
}