自己主动代码复制工具

工具用途:

平时开发程序的时候,假设要在系统里新增一个模块,一般会复制已有的代码文件,然后再做一些改动。假设已有一个User的增删改查模块,此时要新增一个对Student的类似模块,我们就会复制User的Action/Dao/jsp页面等全部java类,然后对里面的内容进行改动。

对于上面的步骤,当再次新增其它模块时,还会再次反复运行:

1.逐个复制各个文件

2.按keyword进行替换(如上面例子中,须要将User替换为Student)

3.依据业务差异,进行改动

本工具用于自己主动完毕上面步骤中前两个步骤,达到加快代码开发的目的。

PS:假设代码模块是基于一种标准的SSH模式来编写的,自然能够採用标准的代码生成工具来生成全套代码,网上也有非常多类似的工具,可是纵观各个不同公司的代码,风格各异,非常难有一个统一的代码生成工具来生成合适的全套代码,所以这样的复制改动的方法反而更适用一些。

工具代码实现:

package cn.jerryhouse.util.cc;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.List;

public class CodeCopier {
	private List<String> srcFileList = new LinkedList<String>();
	private String srcBaseDir;
	private String destBaseDir;
	private List<ReplacePair> replacePairList = new LinkedList<ReplacePair>();
	private final String NEW_LINE = System.getProperty("line.separator");

	public void process()
	{
		for(String filePath: srcFileList)
		{
			String destFilePath = getDestFilePath(filePath);
			copyAndModifyFile(filePath,destFilePath);
		}
	}
	private String getDestFilePath(String srcFilePath)
	{
		File srcFile = new File(srcFilePath);
		String srcFileName = srcFile.getName();
		String srcFileDir = srcFile.getParent();
		String destFileName = getDestFileName(srcFileName);
		String destFilePath = this.destBaseDir+srcFileDir.substring(srcBaseDir.length())+File.separator+destFileName;
		return destFilePath;
	}
	private String getDestFileName(String srcFilePath)
	{
		return updateContentByPattern(srcFilePath);
	}
	private void copyAndModifyFile(String srcFilePath,String destFilePath)
	{
		try {
			mkdirsForFilePath(destFilePath);
			BufferedReader br = new BufferedReader(new FileReader(srcFilePath));
			BufferedWriter bw = new BufferedWriter(new FileWriter(destFilePath));
			String line;
			while((line=br.readLine())!=null)
			{
				String updatedLine = updateContentByPattern(line);
				bw.write(updatedLine+NEW_LINE);
			}
			br.close();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	private void mkdirsForFilePath(String filePath)
	{
		File file = new File(filePath);
		file.getParentFile().mkdirs();
	}
	private String updateContentByPattern(String content)
	{
		for(ReplacePair replacePair: replacePairList)
		{
			content = content.replaceAll(replacePair.getToReplacePattern(), replacePair.getReplacement());
		}
		return content;
	}
	public void addReplacePair(String toReplacePattern,String replacement)
	{
		replacePairList.add(new ReplacePair(toReplacePattern,replacement));
	}
	public void addSrcFile(String srcFilePath)
	{
		srcFileList.add(srcFilePath);
	}
	public void setSrcBaseDir(String srcBaseDir) {
		this.srcBaseDir = srcBaseDir;
	}
	public void setDestBaseDir(String destBaseDir) {
		this.destBaseDir = destBaseDir;
	}
}
package cn.jerryhouse.util.cc;

public class ReplacePair {
	private String toReplacePattern;
	private String replacement;
	public ReplacePair(String toReplacePattern,String replacement)
	{
		this.toReplacePattern = toReplacePattern;
		this.replacement = replacement;
	}
	public String getToReplacePattern() {
		return toReplacePattern;
	}
	public void setToReplacePattern(String toReplacePattern) {
		this.toReplacePattern = toReplacePattern;
	}
	public String getReplacement() {
		return replacement;
	}
	public void setReplacement(String replacement) {
		this.replacement = replacement;
	}

}

測试代码:

package cn.jerryhouse.util.cc.test;

import org.junit.Test;

import cn.jerryhouse.util.cc.CodeCopier;

public class CodeCopierTest {

	@Test
	public void testProcess() {
		CodeCopier codeCopier = new CodeCopier();
		codeCopier.setSrcBaseDir("D:/tmp/sshExample2");
		codeCopier.setDestBaseDir("D:/tmp1/sshExample2");
		codeCopier.addSrcFile("D:/tmp/sshExample2/src/cn/jerry/ssh/mdv/action/UserAction.java");
		codeCopier.addSrcFile("D:/tmp/sshExample2/src/cn/jerry/ssh/mdv/dao/UserDaoImp.java");
		codeCopier.addReplacePair("User", "Student");
		codeCopier.addReplacePair("user", "student");
		codeCopier.process();
	}

}

拷贝文件和源文件对照:

转载请注明出处:http://blog.csdn.net/u014569459/article/details/38327339





时间: 2024-09-30 19:14:31

自己主动代码复制工具的相关文章

自动代码复制工具

工具用途: 平时开发程序的时候,如果要在系统里新增一个模块,通常会复制已有的代码文件,然后再做一些修改.如果已有一个User的增删改查模块,此时要新增一个对Student的类似模块,我们就会复制User的Action/Dao/jsp页面等所有java类,然后对里面的内容进行修改. 对于上面的步骤,当再次新增其他模块时,还会再次重复执行: 1.逐个复制各个文件 2.按关键字进行替换(如上面样例中,需要将User替换为Student) 3.根据业务差异,进行修改 本工具用于自动完成上面步骤中前两个步

Java代码检测工具

开发软件时,我的主要目标之一是:要么防止将缺陷引入代码库,要么限制缺陷的生存期:换言之,要尽早找到缺陷.很显然,越是了解如何编写更好的代码以及如何有效测试软件,就越能及早地捕捉到缺陷.我也很想要一张能发现潜在缺陷的安全之网. 得出了这样的结论:将检验工具集成到构建过程(例如,使用 Ant 或 Maven)中,能够建立起一种寻找潜在缺陷的方法.尽管这种方法使一致性成为可能并超越了 IDE,但它也有一点反作用.必须在本地构建软件或等待 Continuous Integration 构建的运行.如果使

Net中的代码规范工具及使用

Net中的代码规范工具及使用 https://www.cnblogs.com/selimsong/p/9209254.html 上一篇文章介绍了编码标准中一些常用的工具,本篇就具体来介绍如何使用它们来完成代码管理. 本文主要内容有: Roslyn简介 开发基于Roslyn的代码分析器 常用的基于Roslyn的代码分析器 在.Net Framework项目中使用代码分析器 安装StyleCop Analyser 设置规则 将自定义的规则使用到整个解决方案 修复代码 使用StyleCop.Json

几个有用的软件开发工具之——代码编辑工具

1 代码编辑工具 1.1 source insight Source insight 是一款很优秀的代码编辑软件,支持创建project(同一时候支持网络创建),语法着色,词语联想,它的代码搜索功能很强大,很适合阅读代码. 下图是Source insight的全视图: 左边为变量和參数列表: 右边为project文件列表: 右下角为函数调用树: 左下角为鼠标所指变量或者函数的定义 中间为正文,黄色表示这一行刚刚更改,还未保存.假设保存,则更改行会显示为灰色. 以下介绍一下工具的搜索功能: 搜索功

Git代码管理工具

Git代码管理工具 Git 是分布式的源代码管理工具,这点区别于svn -让源代码可以被追溯,主要是记录了每次的更新了什么,如果新版本不想用,那么则可以退回之前的版本 -Git 是Linux之父当年为了维护管理Linux的源代码写的一个工具 -在没有网络的情况下也可以提交代码(提交到本地),进行记录,有网络时再提交到服务器 Git安装 下载相应的版本并安装,记住你选择的安装目录 安装完成之后,打开dos窗口,输入 git --version   检测是否安装成功以及Git的版本 C:\Users

阅读代码分析工具Understand 2.0试用

Understand 2.0是一款源码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实能够大大提高代码阅读效率. 因为Understand功能十分强大,本文不可能详尽地介绍它的全部功能,所以仅仅列举本人觉得比較重要或有特色的功能,以做抛砖引玉之举. Understand 2.0能够从http://www.scitools.com/下载到,安装后能够试用15天. 使用Understand阅读代码前.要先创建一个Project,然后把全部的源码文件增加到这个Project里.这里我创建了

开发中的代码管理工具梳理

参考:https://blog.csdn.net/growing_tree/article/details/44084179 参考:https://blog.csdn.net/zhhelnice/article/details/52385285 参考:https://blog.csdn.net/growing_tree/article/details/44084179 代码管理工具有很多,看了很多文章,有必要梳理一下. 一.为什么使用代码管理工具? 就像zhhelnice的博客在博客里总结的那样

Coverity代码扫描工具

1.说明:Coverity代码扫描工具可以扫描java,C/C++等语言,可以和jenkins联动,不过就是要收钱,jenkins上的插件可以用,免费的,适用于小的java项目 2.这是Coverity的github地址       https://github.com/jenkinsci/coverity-plugin 3.以下是coverity在jenkins上操作       jenkins=詹金斯 安装插件使用插件管理器,重启詹金斯. Coverity配置工具(管理詹金斯>全球工具配置)

USB加密狗复制工具加密狗复制克隆软件教程

USB加密狗复制工具教程加密狗复制克隆软件(24款) 加密狗读狗工具集(加密狗数据读取工具)共包含了24个常用的读狗工具,包括Rockey2加密狗读狗工具.Rockey4ND加密狗读狗工具等等.加密狗通过在软件执行过程中和加密狗交换数据来实现加密的.加密狗内置单片机电路(也称CPU),使得加密狗具有判断.分析的处理能力,增强了主动的反解密能力.这里给您提供的是加密狗读狗工具文件基本对所有的加密狗都可读取,是你解密加密狗的最好工具. 使用方法:1.将对应文件夹内的.dll文件复制到软件安装好的目录