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();
}
}
}
【笔记】NC正式环境部署后的modules转换成适用于开发环境的modules文件格式
于 2023-05-06 14:48:17 首次发布