package myReplace;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author jpsoft mengzhijun
*
*/
public class DealWithFilesBase2 {//便捷式一站处理xml,query.jsp,update.jsp文件的下划线问题,支持处理业务扩展,只需将要处理的文件放在桌面生成的ObjectFile文件夹里,然后在桌面生成的result文件夹里寻找修改后的文件即可
private String deskopPath="^c:\\\\Users\\(\S){0,}\\Desktop$";//桌面路径匹配表达式
private String deskopPath2="^c:\\Users\\(\S){0,}\\Desktop$";
private String xmlFIleMatch=".xml$";//匹配.xml文件名
private String queryFileMatch="Query(\w){0,}.jsp$";//匹配Query.jsp文件名
private String updateFileMatch="Update(\w){0,}.jsp$";//匹配Update.jsp文件名
private String saveFileMatch=".txt$";//匹配.txt文件名
private String resultxmlPath="xml";
private String resultQueryPath="queryJsp";
private String resultUpdatePath="updateJsp";
private String objectFilePath="ObjectFile";
private String resultFilePath="result";
private String writePath=resultFilePath;//默认路径为result
private String cHARY=String.valueOf('"');
private String SOLIDSk=writePath;
private String userPath="^c:\\Users";
/**
* 直接获取uers的路径
*/
public File getUserPathFile(File h)
{
File file[]=h.listFiles();
for(File f:file){
if(isMatch(userPath, f.getPath()))
{return f;}}
return null;}
/**
* 快速获取桌面位置
* @return
*/
public String getDeskopLocationQuik()
{
File file=new File("C:");
@SuppressWarnings("static-access")
File []homePath=file.listRoots();
for(File h:homePath) {
if(h.isDirectory()){
File file2=getUserPathFile(h);
return findDeskop2(file2).getAbsolutePath();}}
return null;
}
/**
* 找寻桌面2
* @param file
* @return
*/
public File findDeskop2(File file)
{
File tempFile=file;
if(tempFile.exists()&&tempFile.isDirectory()){
if(tempFile.getName().equals("Desktop")&&isMatch(deskopPath2, tempFile.getAbsolutePath())&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))&&(!tempFile.getPath().equals("C:\Users\Default\Desktop")))
{return tempFile;}
File []files=tempFile.listFiles();
if(files!=null){
for(File f:files)
{
if(f!=null){
tempFile=findDeskop2(f);
if(tempFile.getName().equals("Desktop")&&isMatch(deskopPath2, tempFile.getAbsolutePath())&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))){break;};
}}}}
return tempFile;
}
/**
* 找到电脑桌面的位置
* @return
*/
public String getDeskopLocation()
{
File file=new File("C:");
@SuppressWarnings("static-access")
File []homePath=file.listRoots();
for(File h:homePath) {
if(h.isDirectory()){
return findDeskop(file).getAbsolutePath();}}
return null;
}
/**
* 搜索计算机桌面的位置
* @param file
* @return
*/
public File findDeskop(File file)
{
File tempFile=file;
if(tempFile.exists()&&tempFile.isDirectory()){
if(tempFile.getName().equals("Desktop")&&isMatch(deskopPath, tempFile.getAbsolutePath())&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))&&(!tempFile.getPath().equals("C:\Users\Default\Desktop")))
{return tempFile;}
File []files=tempFile.listFiles();
if(files!=null){
for(File f:files){
if(f!=null){
tempFile=findDeskop(f);
if(tempFile.getName().equals("Desktop")&&isMatch(deskopPath, tempFile.getAbsolutePath())&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))&&(!tempFile.getPath().equals("C:\Users\Default\Desktop"))){break;};}}
}}
return tempFile;
}
/**
* 判断是否匹配,处理文件名
* @param regex
* @param objectString
* @return
*/
public boolean isMatch(String regex,String objectString)
{Pattern pattern=Pattern.compile(regex);
if(regex.equals(deskopPath)){pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);}
if(regex.equals(deskopPath2)){pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);}
if(regex.equals(userPath)){pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);}
Matcher matcher=pattern.matcher(objectString);
return matcher.find();
}
/**
* 找到和输出匹配
* @param regex
* @param objectString
* @param isUpdate
* @return
*/
public StringBuffer findMatchAndSubMatch(String regex,String objectString,boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find()){
sb.append(matcher.group());
System.out.println("截取:"+sb.toString());}
return sb;
}
/**
* 增加,在同一行
*@param addString 要增加的字符串
* @param regex 正则表达式
* @param objectString 目标字符串
* @param isUpdate
* @return
*/
public StringBuffer findMatchaddStringeL(String regex,String objectString,String addString, boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find())
{System.out.println(matcher.group());
if(matcher.group().indexOf("$")>-1){
matcher.appendReplacement(sb,"\"+ matcher.group()+" "+addString);
}else{
matcher.appendReplacement(sb, matcher.group()+" "+addString);
System.out.println(sb.toString());}}
matcher.appendTail(sb);
return sb;
}
/**
* 处理增加的字段,不同行增加
* @param addString 要增加的字符串
* @param regex 正则表达式
* @param objectString 目标字符串
* @param isUpdate
* @return
*/
public StringBuffer findMatchaddStringDl(String regex,String objectString,String addString, boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find())
{System.out.println("替换前:"+matcher.group());
if(matcher.group().indexOf("$")>-1) {
matcher.appendReplacement(sb,"\"+ matcher.group());}else{
matcher.appendReplacement(sb, matcher.group());
}
}
matcher.appendTail(sb);
sb.append("
").append(addString).append("
");
System.out.println("替换后"+sb.toString());
return sb;
}
/**
* 找到匹配,并替换全部匹配到的
* @param regex 正则表达式
* @param objectString 目标字符串
* @param updateString 用于替换的字符串
* @param isUpdate
* @return
*/
public StringBuffer findMatchreplaceAllMatch(String regex,String objectString,String updateString, boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find()){
matcher.appendReplacement(sb, updateString);}
System.out.println("替换后"+sb.toString());
matcher.appendTail(sb);
return sb;
}
/**
* 用来替换匹配到的字符串中某部分的值
* @param regex 第一次匹配到的
* @param somerRexgex 匹配到再次匹配的正则表达式
* @param objectString
* @param updateString 用来替换的字符串
* @param isUpdate
* @return
*/
public StringBuffer findMatchreplaceSomeMatch(String regex,String somerRexgex,String objectString,String updateString, boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find()){
String temString=findMatchreplaceAllMatch(somerRexgex, matcher.group(), updateString, isUpdate).toString();
matcher.appendReplacement(sb, temString);}
System.out.println("替换后"+sb.toString());
matcher.appendTail(sb);
return sb;
}
/**
* 找到某个匹配并删除
* @param regex
* @param objectString
* @param isUpdate
* @return
*/
public StringBuffer findMatchdelete(String regex,String objectString,boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find())
{System.out.println("替换前"+matcher.group());
matcher.appendReplacement(sb, "");
System.out.println(sb.toString());
}
matcher.appendTail(sb);
return sb;
}
/**
* 处理匹配,并返回处理后的结果
* @param regex
* @param objectString
* @return
*/
public StringBuffer findMatchGroupe(String regex,String objectString,boolean isUpdate)
{
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(objectString);
while(matcher.find())
{
if(isUpdate){if(isContainfor_(matcher.group())){matcher.appendReplacement(sb,"id="+cHARY+"for_"+subString(matcher.group().substring(8)));}
else{
matcher.appendReplacement(sb,subString(matcher.group()));}
}else{
matcher.appendReplacement(sb,subString(matcher.group()));}
}
matcher.appendTail(sb);
return sb;
}
/**
* 处理for_,针对update.jsp里的id="for_**
*/
public boolean isContainfor_(String objectString)
{Pattern pattern=Pattern.compile("id=\Sfor(\w){0,}");
Matcher matcher=pattern.matcher(objectString);
return matcher.find();
}
/**
* 扫描目标文件夹的文件
*/
public void scanFile(String filePath)
{
int i=0;
File file=new File(filePath);
if(file.isDirectory())
{
File[] files=file.listFiles();
for(File f:files)
{if(f!=null){
System.out.println("正在执行第"+(++i)+"个文件");
setWritePath();
if(isMatch(xmlFIleMatch,f.getName() )){this.writePath=this.writePath+"\"+resultxmlPath+"\"+f.getName() ;}
if(isMatch(queryFileMatch, f.getName())){this.writePath=this.writePath+"\"+resultQueryPath+"\"+f.getName();}
if(isMatch(updateFileMatch, f.getName())){this.writePath=this.writePath+"\"+resultUpdatePath+"\"+f.getName();}
produceResultFiles(readFile(f),this.writePath);
System.out.println("生成路径:"+writePath);
}
}
}
}
/**
* 初始化writePath路径
*/
public void setWritePath()
{
this.writePath=this.SOLIDSk;
}
/**
* 文件读取
* @param f
*/
public StringBuffer readFile(File f)
{
StringBuffer tBuffer=new StringBuffer();
InputStream iStream=null;
InputStreamReader bstream=null;
BufferedReader bReader=null;
try {
iStream=new FileInputStream(f);
bstream =new InputStreamReader(iStream);
bReader=new BufferedReader(bstream);
if(isMatch(saveFileMatch, f.getName())){tBuffer=dealWithTXT(bReader);}
if(isMatch(xmlFIleMatch,f.getName() )){ tBuffer=dealWithXml(bReader);}
if(isMatch(queryFileMatch, f.getName())){tBuffer=dealWithQueryJsp(bReader);}
if(isMatch(updateFileMatch, f.getName())){tBuffer=dealWithUpdateJsp(bReader);}
} catch (FileNotFoundException e) {}
finally{try {
bReader.close();
bstream.close();
iStream.close();}
catch (IOException e) {e.printStackTrace(); }}
return tBuffer;
}
/**
* 处理带下划线的字符串
* @param temstring
* @return
*/
public String subString(String temstring)
{
String mytemp=null;
for(int i=0;i<temstring.length();i++)
{
if("_".equals(temstring.substring(i, i+1)))
{
mytemp= temstring.replace(temstring.substring(i,i+2), temstring.substring(i+1, i+2).toUpperCase());
mytemp= subString(mytemp);
break;
}
}
return mytemp!=null?mytemp:temstring;
}
/**
* 生成结果文件
* @param writePath
*/
public void produceResultFiles( StringBuffer textContent,String mywritePath)
{
File file=new File(mywritePath);
OutputStream foStream=null;
OutputStreamWriter oWriter=null;
BufferedWriter bWriter=null;
if(!file.exists()){try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
} }
try {
foStream=new FileOutputStream(file);
oWriter=new OutputStreamWriter(foStream);
bWriter=new BufferedWriter(oWriter);
bWriter.write(textContent.toString());
bWriter.flush();
} catch (IOException e) {
System.out.println("文件写入失败");
e.printStackTrace();}finally{
try {
bWriter.close();
oWriter.close();
foStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 处理txt格式文件
* @param bReader
* @return
*/
public StringBuffer dealWithTXT( BufferedReader bReader)
{String tempString="";
StringBuffer sBuffer=new StringBuffer();
try {
while((tempString=bReader.readLine())!=null){
sBuffer.append(tempString);}
} catch (IOException e) {
e.printStackTrace();}
return sBuffer;
}
/**
* 处理xml文件
* @param bReader
* @return
*/
public StringBuffer dealWithXml(BufferedReader bReader)
{
String tempString="";
StringBuffer sBuffer=new StringBuffer();
try {
while((tempString=bReader.readLine())!=null)
{
tempString=findMatchGroupe(":(\w){0,}", tempString,false).toString();
sBuffer.append(tempString).append("
");
}
} catch (IOException e) {
e.printStackTrace();
}
return sBuffer;
}
/**
* 处理queryJsp文件
* @param bReader
* @return
*/
public StringBuffer dealWithQueryJsp(BufferedReader bReader)
{
String tempString="";
StringBuffer sBuffer=new StringBuffer();try {
while((tempString=bReader.readLine())!=null){
tempString=findMatchGroupe("(\{(\w){0,}\S{0,}\})|\{(\w){0,}\S{0,}", tempString,false).toString();
sBuffer.append(tempString).append("
");}
} catch (IOException e) {
e.printStackTrace();
}
return sBuffer;
}
/**
* 处理updateJsp
* @param bReader
* @return
*/
public StringBuffer dealWithUpdateJsp(BufferedReader bReader)
{
String tempString="";
StringBuffer sBuffer=new StringBuffer();
try {
while((tempString=bReader.readLine())!=null){
tempString=findMatchGroupe("name=\S(\w){0,}|id=\S(\w){0,}", tempString,true).toString();
sBuffer.append(tempString).append("
");}
} catch (IOException e) {
e.printStackTrace();
}
return sBuffer;
}
/**
* 执行
*/
public void execute()
{ String deskopPath="";
File file=new File("com.jpsoft.savePath.txt");
if(!file.exists()){
try {
System.out.println("第一次运行,可能需要几分钟,请耐心等待.....");
Long beginLong= new Date().getTime();
file.createNewFile();
String path=getDeskopLocationQuik();
System.out.println("查询桌面路径所花费时间:"+(double)((new Date().getTime()-beginLong)/1000)+"s");
produceResultFiles((new StringBuffer()).append(path),file.getName() );
deskopPath= readFile(file).toString();} catch (IOException e) {
System.out.println("文件创建失败");}}
deskopPath= readFile(file).toString();
File objectFileContents=new File(deskopPath+"\"+objectFilePath);
if(!objectFileContents.exists()){objectFileContents.mkdir();System.out.println("目标文件路径创建成功"+" 路径:"+objectFileContents.getPath());}
File resultFileContents=new File(deskopPath+"\"+resultFilePath);
if(!resultFileContents.exists()){resultFileContents.mkdir();System.out.println("结果文件夹路径创建成功"+" 路径:"+resultFileContents.getPath());}
File xmlFileContent=new File(deskopPath+"\"+resultFilePath+"\"+resultxmlPath);
if(!xmlFileContent.exists()){xmlFileContent.mkdir();System.out.println("xml文件夹路径创建成功"+" 路径:"+xmlFileContent.getPath());}
File queryFileContent=new File(deskopPath+"\"+resultFilePath+"\"+resultQueryPath);
if(!queryFileContent.exists()){queryFileContent.mkdir();System.out.println("queryjsp文件夹路径创建成功"+" 路径:"+queryFileContent.getPath());}
File updateFileContent=new File(deskopPath+"\"+resultFilePath+"\"+resultUpdatePath);
if(!updateFileContent.exists()){updateFileContent.mkdir();System.out.println("updateJsp文件夹路径创建成功"+" 路径:"+updateFileContent.getPath());}
deskopPath= readFile(file).toString();
this.writePath=deskopPath+"\"+resultFilePath;
this.SOLIDSk=this.writePath;
scanFile(deskopPath+"/"+objectFilePath);
System.out.println("运行成功");
}
/**
* @param args
*/
public static void main(String[] args) {
DealWithFilesBase2 dFiles=new DealWithFilesBase2();
dFiles.execute();
}
}