【笔记】NC正式环境部署后的modules转换成适用于开发环境的modules文件格式

package cn.transfor;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * <p>正式环境的modules与我们开发项目的项目结构有一定的差别,如果我们要在新的git分布式管理工具上上传正式环境的modules,
 * 那么这个modules无法直接检出做为我们的项目,因此需要把modules转换为项目结构</p>
 * <p><b>说明:</b>最好是保存一份现有的项目,在把正式modules转换称对应的项目结后,用转换后的项目覆盖原来的项目,这样就能把正式环境的代码同步到我们的项目中</p>
 * <p>创建时间:2019年5月9日 14点10分</p>
 * @author zihui
 */
public class Transfor {

    private InputStream input;
    private OutputStream output;
    private static int length;
    
    /**
     * 例如需要转换称项目格式的文件夹结构如下所示:
     * modules_47_190417/
     *   |--| aim/
     *   |--|--lib/
     *   |--|--|--| pubaim_aimreport.jar
     *   |--|--|--| pubaim_embase.jar
     *   |--|--|--| ...
     *   |--| fdcpm/
     *   |--|--| class/
     *   |--|--|--| com/
     *   |--|--|--|--| ufida/
     *   |--|--|--|--|--| report/
     *   |--|--|--| nc/
     *   |--|--|--| test/
     *   |--|--|--| docconfig.properties
     *   |--|--| client/
     *   |--|--| config/
     *   |--|--| lib/
     *   |--|--| METADATA/
     *   |--|--| META-INF/
     *   |--|--|--| class/
     *   |--|--|--| lin/
     *   |--|--|--| bm.upm
     *   |--|--|--| ChangeControl.upm
     *   |--|--|--| ...
     */
    private String sourceFolder = "C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417"; //需要转换项目格式的文件夹路径
    private String destinationFolder = "C:\\Users\\zihui\\Desktop\\TransTest\\modules_new"; //转换的目标路径
    
    public void getFileList() throws IOException {
        
        File createDestinationFolder = new File(destinationFolder);
        if(!createDestinationFolder.exists()) {
            createDestinationFolder.mkdirs();
        }
        
        
        File s_dir = new File(sourceFolder);
        File[] files = s_dir.listFiles(); //正式modules下的所有文件
        if(files != null) {
            for(int i = 0 ; i < files.length ; i++) {
                String fileName = files[i].getName(); //正式modules下所有文件的名称
                if(files[i].isDirectory()) {
                    String d_folder_second = destinationFolder+"\\"+fileName; //C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm
                    File d_dir_second = new File(d_folder_second); 
                    if(!d_dir_second.exists()) {
                        d_dir_second.mkdir();
                    }
                    String s_folder_second = sourceFolder+"\\"+fileName;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417\\fdcpm
                    File s_dir_second = new File(s_folder_second);
                    File[] second_files = s_dir_second.listFiles(); //正式modules/fdcpm下所有文件
                    if(second_files != null) {
                        for(int j = 0 ; j < second_files.length ; j++) {
                            String fileName_second = second_files[j].getName(); //正式modules/fdcpm下所有文件的名称
                            boolean isDirectory = second_files[j].isDirectory();
                            if(isDirectory && "classes".equals(fileName_second)) {
                                String d_folder_three = d_folder_second+"\\src\\public"; //C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\public
                                File d_dir_three = new File(d_folder_three);
                                if(!d_dir_three.exists()) {
                                    d_dir_three.mkdirs(); 
                                }
                                String beginFilename = s_folder_second+"\\"+fileName_second;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417\\fdcpm\\class
                                String endFilename = d_folder_three;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\public
                                cycleCopyFiles(beginFilename, endFilename);
                                
                            } else if(isDirectory && "client".equals(fileName_second)) {
                                String d_folder_three = d_folder_second+"\\src\\client"; //C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\client
                                File d_dir_three = new File(d_folder_three);
                                if(!d_dir_three.exists()) {
                                    d_dir_three.mkdirs();
                                }
                                //C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417\\fdcpm\\client\\classes
                                String beginFilename = s_folder_second+"\\"+fileName_second+"\\classes";
                                String endFilename = d_folder_three;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\client
                                cycleCopyFiles(beginFilename, endFilename);
                                
                            } else if(isDirectory && "META-INF".equals(fileName_second)) {
                                String s_folder_three = s_folder_second+"\\"+fileName_second;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417\\fdcpm\\META_INF
                                File s_dir_three = new File(s_folder_three);
                                File[] metainf_files = s_dir_three.listFiles();
                                if(metainf_files != null) {
                                    for(int k = 0 ; k < metainf_files.length ; k++) {
                                        String metainf_fileName = metainf_files[k].getName();
                                        if(metainf_files[k].isDirectory() && "classes".equals(metainf_fileName)) {
                                            String d_folder_three = d_folder_second+"\\src\\private"; //C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\private
                                            File d_dir_three = new File(d_folder_three);
                                            if(!d_dir_three.exists()) {
                                                d_dir_three.mkdirs();
                                            }
                                            String beginFilename = s_folder_three+"\\classes";//C:\\Users\\zihui\\Desktop\\TransTest\\modules_47_190417\\fdcpm\\META_INF\\classes
                                            String endFilename = d_folder_three;//C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\src\\private
                                            cycleCopyFiles(beginFilename, endFilename);
                                            
                                        } else if(!metainf_files[k].isDirectory() && (metainf_fileName.endsWith(".upm") || metainf_fileName.endsWith(".aop"))) {
                                            String metainfoPath = d_folder_second+"\\META-INF";//C:\\Users\\zihui\\Desktop\\TransTest\\modules_new\\fdcpm\\META-INF
                                            File mkMETAINF = new File(metainfoPath);
                                            if(!mkMETAINF.exists()) {
                                                mkMETAINF.mkdir();
                                            }
                                            String beginFilename = s_folder_three+"\\"+metainf_fileName;
                                            String endFilename = metainfoPath+"\\"+metainf_fileName;
                                            fileCopy(beginFilename, endFilename);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    
                }
            }
            System.out.println("项目结构转换完成");
        } else {
            System.out.println("路径:" + s_dir + "下没有任何文件!");
        }
    }
    
    /**
     * 文件的复制
     * @param beginFilename 原始文件
     * @param endFilename 目标文件
     */
    public void fileCopy(String beginFilename, String endFilename) {
        // 创建输入输出流对象
        try {
            input = new FileInputStream(beginFilename);
            output = new FileOutputStream(endFilename);
            try {
                length = input.available(); // 获取文件长度
                byte[] buffer = new byte[length]; // 创建缓存区域
                input.read(buffer); // 将文件中的数据写入缓存数组
                output.write(buffer); // 将缓存数组中的数据输出到文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (input != null && output != null) {
                try {
                    input.close(); // 关闭流
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * <p>循环查询beginPath文件夹中的内容,如果是文件夹就在endPath路径下创建相同的文件夹,如果是文件就在endPath路径下复制相同的文件</p>
     * <p>创建时间:2019年5月9日 12点04分</p>
     * @author zihui
     * @param beginPath 需循环查询的源路径
     * @param endPath 目标路径
     * @throws IOException
     */
    public void cycleCopyFiles(String beginPath, String endPath) throws IOException {
        File beginDir = new File(beginPath);
        File[] beginDirFiles = beginDir.listFiles();
        if(beginDirFiles != null) {
            for(int i = 0 ; i < beginDirFiles.length ; i++) {
                String nextName = beginDirFiles[i].getName();
                if(beginDirFiles[i].isDirectory()) {
                    String newbeginPath = beginPath+"\\"+nextName;
                    String newendPath = endPath+"\\"+nextName;
                    File create = new File(newendPath);
                    create.mkdir();
                    cycleCopyFiles(newbeginPath, newendPath);
                } else {
                    String newCopyFile1 = beginPath+"\\"+nextName;
                    String newCopyFile2 = endPath+"\\"+nextName;
                    fileCopy(newCopyFile1, newCopyFile2);
                }
            }
        }
    }
    
    public static void main(String[] args) {
        Transfor tf = new Transfor();
        try {
            tf.getFileList();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值