package com.vci.web.service.impl;
|
|
import com.vci.starter.web.pagemodel.Tree;
|
import com.vci.starter.web.util.LocalFileUtil;
|
import com.vci.web.service.VciMdServiceI;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.ResourceUtils;
|
|
import java.io.*;
|
import java.net.URL;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
/**
|
* markdown的服务
|
* @author weidy
|
* @date 2021/3/16
|
*/
|
@Service
|
public class VciMdServiceImpl implements VciMdServiceI {
|
|
/**
|
* 日志
|
*/
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
/**
|
* 文档文件路径和标题的映射
|
*/
|
private static Map<String,String> markDownFileMap = new ConcurrentHashMap<>();
|
/**
|
* 扫描所有的md文件
|
*/
|
@Override
|
public void scanAllMdFile() {
|
String jarFilePath = null;
|
//这个是在运行环境
|
jarFilePath = LocalFileUtil.getProjectFolder(getClass()) + File.separator + "md";
|
if(StringUtils.isNotBlank(jarFilePath)){
|
File folder = new File(jarFilePath);
|
if(folder.exists()){
|
File[] files = folder.listFiles();
|
for(File file : files){
|
readFromFile(file);
|
}
|
}
|
}
|
if(CollectionUtils.isEmpty(markDownFileMap)){
|
URL resource = null;
|
try {//这个是在开发环境
|
resource = ResourceUtils.getURL("classpath:md");
|
} catch (FileNotFoundException e) {
|
}
|
if(resource!=null){
|
File folder = new File(resource.getPath() );
|
if(folder.exists()){
|
File[] files = folder.listFiles();
|
for(File file : files){
|
readFromFile(file);
|
}
|
}
|
}
|
}
|
// //看看外置的文件夹
|
// File folder = new File(LocalFileUtil.getProjectFolder() +File.separator + "md");
|
// if(folder.exists()){
|
// File[] files = folder.listFiles();
|
// for(File file : files){
|
// readFromFile(file);
|
// }
|
// }
|
}
|
|
/**
|
* 从文件中读取
|
* @param file 文件
|
*/
|
private void readFromFile(File file){
|
String fileName = file.getName();
|
RandomAccessFile raf = null;
|
String title = "";
|
try{
|
raf = new RandomAccessFile(file,"r");
|
title = raf.readLine();
|
} catch (IOException e ) {
|
if(logger.isErrorEnabled()){
|
logger.error("读取文件",e);
|
}
|
} finally {
|
if(raf!=null){
|
try {
|
raf.close();
|
} catch (IOException e) {
|
if(logger.isErrorEnabled()){
|
logger.error("关闭文件",e);
|
}
|
}
|
}
|
}
|
try {
|
title = title==null?"":new String(title.getBytes("ISO-8859-1"),"utf-8").replace("#","");
|
} catch (UnsupportedEncodingException e) {
|
if(logger.isErrorEnabled()){
|
logger.error("转换标题",e);
|
}
|
}
|
markDownFileMap.put(fileName,title);
|
}
|
|
/**
|
* 获取md文件的名字
|
*
|
* @return 名称的树形展示
|
*/
|
@Override
|
public List<Tree> treeAllMD() {
|
List<Tree> treeList = new ArrayList<>();
|
markDownFileMap.forEach((fileName,title)->{
|
Tree tree = new Tree();
|
tree.setOid(fileName);
|
if(StringUtils.isNotBlank(title)){
|
tree.setText(title);
|
}else{
|
tree.setText(fileName);
|
}
|
treeList.add(tree);
|
});
|
return treeList;
|
}
|
}
|