正则表达式的使用 和 文件相关操作

前端之家收集整理的这篇文章主要介绍了正则表达式的使用 和 文件相关操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

输入: 文件名name,设置文件路径path

说明: 文件名为一个文档的名字,文档中有一系列 文档名和链接名;

文档中设置的文档名或者链接名规则为 [[ name]]中 name

name 如果为 a | b ,则a为文件且b为a的链接

否则 为a,a为文档

文件已经保存在path指定的路径中 or 不存在

目的: 1) 指定一个文档名str,找出该文件中所有文档文件链接文件,还有文档str中包含的其他文档中的文档

2)清除指定路径或文件,如果是路径,则删除整个目录

收获: 1) map<string,int > 当值为1表示文档;值为2表示链接,用于保存文件名;

这样通过一个map能够很快查找到当前文件是否已经保存

2)path.endsWith(File.separator) 判断path (string)表示的字符串是否为目录

3)temp.isDirectory()判断temp (file )是否是目录

temp.isFile() 文档

4) 获取文件内容转换为字符串

				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();

5) 删除文件 或目录

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

猜你在找的正则表达式相关文章