说明: 文件名为一个文档的名字,文档中有一系列 文档名和链接名;
文档中设置的文档名或者链接名规则为 [[ name]]中 name
否则 为a,a为文档
文件已经保存在path指定的路径中 or 不存在
目的: 1) 指定一个文档名str,找出该文件中所有文档文件和链接文件,还有文档str中包含的其他文档中的文档
收获: 1) map<string,int > 当值为1表示文档;值为2表示链接,用于保存文件名;
这样通过一个map能够很快查找到当前文件是否已经保存
2)path.endsWith(File.separator) 判断path (string)表示的字符串是否为目录
3)temp.isDirectory()判断temp (file )是否是目录
temp.isFile() 文档
BufferedReader tBufferedReader = new BufferedReader( new FileReader (str) ); StringBuffer tStringBuffer = new StringBuffer(); String sTempOneLine = new String(""); while ((sTempOneLine = tBufferedReader.readLine()) != null){ tStringBuffer.append(sTempOneLine); } tBufferedReader.close();
file.delete();
整个相关代码如下:
package src.getlinkdoc; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; //setPath 设置文档路径 //get() 返回 // Map(,1) 文档列表 // Map(,2) 链接列表 public class GetAllLinkAndDoc { //输入的文件名 private String name; //设置文件路径 private String path ="C:\\desctest"; //返回数据 private Map<String,Integer> data = new HashMap<String,Integer>() ; //path可为空 GetAllLinkAndDoc(String str){ name = str; } //关闭默认的构造函数 private GetAllLinkAndDoc(){ } public Boolean setStr(String str){ name = str; return true; } public Boolean setPath(String path){ this.path = path; return true; } //判断指定路径中str当前文件是否存在 //注意: 没有考虑在子目录中查找 private Boolean IsExsit(String str){ File file = new File(path); String[] tempList = file.list(); File temp = null; for(String s: tempList){ if (path.endsWith(File.separator)) { temp = new File(path + s); } else { temp = new File(path + File.separator + s); } if (temp.isDirectory()) { //这是目录 continue; } else if(temp.isFile()){ if(s.equals(str)) return true; } } return false; } //判断当前文件是否已加入列表 private Boolean IsInMap(String str){ if( null == data ) return false; else { if(data.containsKey(str)) return true; else return false; } } //将文档转换为一个字符串 // str必须是文件名,否则出错 private String getStreamString(String str){ if (str != null){ try{ //如果路径名不为空就加载路径 if(path != null) { if( path.endsWith(File.separator) ) str+= path; else str =path + File.separator +str ; } BufferedReader tBufferedReader = new BufferedReader( new FileReader (str) ); StringBuffer tStringBuffer = new StringBuffer(); String sTempOneLine = new String(""); while ((sTempOneLine = tBufferedReader.readLine()) != null){ tStringBuffer.append(sTempOneLine); } tBufferedReader.close(); return new String(tStringBuffer); } catch (Exception ex){ ex.printStackTrace(); } } return null; } //从字符串中使用正则表达式获取文档或链接串 private Map<String,Integer> getStrings(String str){ if(str == null ) return null; Map<String,Integer> tempdata = new HashMap<String,Integer>(); String regex = "\\[(img)?\\[(.*?)\\]\\]"; String str2=str; Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(str2); while (m.find()){ //将文档和链接分开 String tempStr= m.group(2); if(tempStr.matches("(.*?)\\|(.*?)") ){ //是链接 String[] tempStrs = tempStr.split("\\|"); // 特例: "|"之后也可能是文档,而不是连接 //判断方法: 在当前cash中判断该文档是否存在 if(IsExsit(tempStrs[1])){ //特例部分是文档 而不是连接 tempdata.put(tempStrs[1],1); } else { tempdata.put(tempStrs[0],2); } } else { //是文档 tempdata.put(tempStr,1); } } return tempdata; } //获取文件中文件名或链接 private Map<String,Integer> getAll(String str){ if(str.isEmpty()) return null; //将文件转换为字符串 String strFile = getStreamString(str); if(strFile==null ) System.out.println("getAll.strFile is null"); //字符串中获取文件和列表 /*String[] strs=strFile.split("[[");*/ Map<String,Integer> strMap = getStrings(strFile); /*System.out.println( strs );*/ if(strMap==null ) System.out.println("getAll.strMap is null"); return strMap; } //递归 private void getAllText(String str){ if(str == null) return ; Map<String,Integer> strMap = getAll(str); if(strMap==null ) System.out.println("getAllText.strMap is null"); else for(Map.Entry<String,Integer> entry: strMap.entrySet()){ //判断是否在文件夹中 if(true == IsExsit(str) ){ //不在列表中 if( false == IsInMap( entry.getKey() )){ data.put(entry.getKey(),entry.getValue()); //是文件 if(1 == entry.getValue() ){ getAllText( entry.getKey() ); } else {//是链表 } } else{ //在列表中不处理 } } } } //Map(,1) 文档列表 //Map(,2) 链接列表 public Map<String,Integer > get(){ if(name == null) return null; else { if(path == null) path = creatworkpath(); if(path == null) return null; File file = new File(path); if (!file.exists()) { System.out.println("current path is not exist!"); return null; } if (!file.isDirectory()) { System.out.println("current path is not a derectory!"); return null; } if(name!=null){ data.put(name,1); getAllText(name); } for(Map.Entry<String,Integer> map: data.entrySet() ){ System.out.println(map.getKey()+" value="+map.getValue().toString()); } return data; } } public static void main(String[] args){ GetAllLinkAndDoc test = new GetAllLinkAndDoc("531新一代历史库技术方案评审问题跟踪"); test.get(); } //删除文件及文件夹 public void delFolder(String folderPath) { try { delAllFile(folderPath); //删除完里面所有内容 String filePath = folderPath; filePath = filePath.toString(); File myFilePath = new File(filePath); myFilePath.delete(); //删除空文件夹 } catch (Exception e) { e.printStackTrace(); } } //删除指定不目录中的所有文件 public boolean delAllFile(String path) { File file = new File(path); if (!file.exists()) { System.out.println("The file is not exist"); return true; } //输入的是文件就删除 if (file.isFile()) { file.delete(); } else if(file.isDirectory()){ //是目录 String[] tempList = file.list(); File temp = null; for (int i = 0; i < tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (file.isFile()) { file.delete(); } if (temp.isDirectory()) { delAllFile(path + File.separator + tempList[i]);//先删除文件夹里面的文件 delFolder(path + File.separator + tempList[i]);//再删除空文件夹 } } } return true; } }原文链接:https://www.f2er.com/regex/362669.html