将散布在项目不同目录下的README.md
文档拼合成一个完整的.
import java.io.*;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
/**
* @author Jion
* 拼合生成README文件
*/
public class GenerateREADME {
// 临时存放文件
private static List<File> readmeFiles = new ArrayList<>();
/** 查找当前目录下的README文件 */
private static void FindReadmeFile(String rootPath) {
File rootDir = new File(rootPath);
// 遍历当前目录
File[] fileArray = rootDir.listFiles();
// 可能为null
if (Objects.isNull(fileArray)) {
return;
}
for (int i = 0; i < fileArray.length; i++) {
// 文件,纪录文件位置
if (fileArray[i].isFile() && fileArray[i].getAbsolutePath().contains("README.md")) {
readmeFiles.add(fileArray[i]);
}
// 目录,下钻
if (fileArray[i].isDirectory()) {
FindReadmeFile(fileArray[i].getAbsolutePath());
}
}
}
/** 获得文件的创建日期 */
private static long getFileCreateTime(File file) {
Path path = Paths.get(file.getAbsolutePath());
BasicFileAttributeView basicview = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
BasicFileAttributes attr;
try {
attr = basicview.readAttributes();
Date createDate = new Date(attr.creationTime().toMillis());
return createDate.getTime();
} catch (Exception e) {
e.printStackTrace();
}
// 异常,返回0
return 0;
}
/** 拼合文件,将第二个文件追加到第一个文件中 */
private static void appendFile(File srcFile, File appendFile){
char[] buf = new char[1024];
try {
FileWriter writer = new FileWriter(srcFile, true);
FileReader reader = new FileReader(appendFile);
int len = 0;
while ((len = reader.read(buf))!=-1){
writer.write(new String(buf,0,len));
}
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/** 主方法 */
public static void main(String[] args) {
// 根目录
String ProjectRootPath = "F:\\Spring-Study\\spring-framework-study\\src\\";
// 根文件
String rootFilePath = "F:\\Spring-Study\\spring-framework-study\\README.md";
File rootFile = new File(rootFilePath);
// 读取根目录下所有ReadMe 赋值 => readmeFiles
FindReadmeFile(ProjectRootPath);
// 根据文件的创建日期进行排序
readmeFiles.sort(new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
long diff = getFileCreateTime(file1) - getFileCreateTime(file2);
if (diff > 0) {
return 1;
} else if (diff < 0) {
return -1;
} else {
return 0;
}
}
});
// 将文件拼合
for (File file: readmeFiles){
appendFile(rootFile,file);
}
}
}