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 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 treeAllMD() { List 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; } }