package com.yihu.hos.core.datatype;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URL;

public class ClassFileUtil {

    /**
     * 工具类不允许进行实例化
     */
    private ClassFileUtil() {

    }

    /**
     * 通过这个工具方法，可以进行class文件的创建
     *
     * @param systemFlowURL 本次进行系统创建的system业务系统存储class文件的根目录
     * @param packageName   class文件的包信息
     * @param className     class文件的类名信息
     * @param path          class文件的路径
     */
    public static void createClassfile(URL systemFlowURL, String packageName, String className, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            File systemFlowFile = new File(systemFlowURL.getPath());
            if (!systemFlowFile.exists()) {
                systemFlowFile.mkdirs();
            }
            File packageFile = new File(systemFlowURL.getPath() + "/" + packageName);
            if (!packageFile.exists()) {
                packageFile.mkdirs();
            }
            String classPath = packageFile + "/" + className + ".class";
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
            }
            file.createNewFile();

            FileOutputStream out = new FileOutputStream(classPath);
            int n = 0;// 每次读取的字节长度
            byte[] bb = new byte[1024];// 存储每次读取的内容
            while ((n = in.read(bb)) != -1) {
                out.write(bb, 0, n);// 将读取的内容，写入到输出流当中
            }
            out.close();
            in.close();
        } catch (Exception e) {
            return;
        }
    }

    public static void updateClassfile(String classPath, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
            } else {
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(classPath);
            int n = 0;// 每次读取的字节长度
            byte[] bb = new byte[1024];// 存储每次读取的内容
            while ((n = in.read(bb)) != -1) {
                out.write(bb, 0, n);// 将读取的内容，写入到输出流当中
            }
            out.close();
            in.close();
        } catch (Exception e) {
            return;
        }
    }

    public static void deleteClassfile(String classPath) {
        // 开始输出文件内容
        try {
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
            }
        } catch (Exception e) {
            return;
        }
    }
}
