All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.compiler.JavaFileObjectUtil Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.core.compiler;

import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.ZipUtil;

import javax.tools.JavaFileObject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipFile;

/**
 * {@link JavaFileObject} 相关工具类封装
 *
 * @author lzpeng, looly
 * @since 5.5.2
 */
public class JavaFileObjectUtil {

	/**
	 * 获取指定文件下的所有待编译的java文件,并以{@link JavaFileObject}形式返回
	 *
	 * @param file 文件或目录,文件支持.java、.jar和.zip文件
	 * @return 所有待编译的 {@link JavaFileObject}
	 */
	public static List getJavaFileObjects(File file) {
		final List result = new ArrayList<>();
		final String fileName = file.getName();

		if (isJavaFile(fileName)) {
			result.add(new JavaSourceFileObject(file.toURI()));
		} else if (isJarOrZipFile(fileName)) {
			result.addAll(getJavaFileObjectByZipOrJarFile(file));
		}
		return result;
	}

	/**
	 * 是否是jar 或 zip 文件
	 *
	 * @param fileName 文件名
	 * @return 是否是jar 或 zip 文件
	 */
	public static boolean isJarOrZipFile(String fileName) {
		return FileNameUtil.isType(fileName, "jar", "zip");
	}

	/**
	 * 是否是java文件
	 *
	 * @param fileName 文件名
	 * @return 是否是.java文件
	 */
	public static boolean isJavaFile(String fileName) {
		return FileNameUtil.isType(fileName, "java");
	}

	/**
	 * 通过zip包或jar包创建Java文件对象
	 *
	 * @param file 压缩文件
	 * @return Java文件对象
	 */
	private static List getJavaFileObjectByZipOrJarFile(File file) {
		final List collection = new ArrayList<>();
		final ZipFile zipFile = ZipUtil.toZipFile(file, null);
		ZipUtil.read(zipFile, (zipEntry) -> {
			final String name = zipEntry.getName();
			if (isJavaFile(name)) {
				collection.add(new JavaSourceFileObject(name, ZipUtil.getStream(zipFile, zipEntry)));
			}
		});
		return collection;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy