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

输入: 文件名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;
		}
	
	
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章&#160;jquery.validate使用攻略1 第二章&#160;jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = &#39;ye wen jun&#39;;let ans = name.replace(/\s/g, &#39;&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod(&quot;letters&quot;, function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) &lt;script type=&quot;text/javascript&quot;&gt; function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from &quot;@/utils/validate&quot;; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: &lt;!-- 表单 --&gt; &lt;el-form ref=&quot;rulesForm&quot; :rules=&quot;formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 &lt;input type=&quot;text&quot; maxlength=&quot;5&quot; /&gt; //可以 &lt;input type=&quot;number&quot; maxlength=&quot;5&quot; /&gt; //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 &lt;input type=&quot;text&quot; onkeyup=&quot;value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf