用java的文件流功能来简化修改代码的重复劳动

作为一个软件工程师,有一个优势就是有些工作,普通人只能用重复的Ctrl+C和C+V来做,而你则可以用for循环来做。

而java真的比C要好的多,当然用C也能写一个可执行程序去帮你做这种重复劳动,但java显然更加便利,因为只有使用过才体会得到。

事情是这样的,最近要改写一个代码,用自动生成的definition去实现一套嵌入式软件的功能定制,有兴趣请参看我另外一篇博文http://blog.csdn.net/johnny_nass_hu/article/details/25103891

要实现自动化定制,原本的代码有一个地方的改动量比较大,那就是用户开机画面的选择,由于历史的原因,这款软件定制的用户界面有200多个画面,也就是头文件里面有200多个include的语句,鉴于用文字无法讲得清楚,我还是贴一部分代码出来吧:

Code 1:
//#include "F:\logo\fuzheng\155audi.c"
//#include "F:\logo\fuzheng\155benz.c"
//#include "F:\logo\fuzheng\155bmw.c"
//#include "F:\logo\fuzheng\155chery.c"
//#include "F:\logo\fuzheng\155honda.c"
//#include "F:\logo\fuzheng\155hyundai.c"
//#include "F:\logo\fuzheng\155infiniti.c"   


我们要把这些代码改造成这样:

#if(CUSTOM_LOGO == logo_fuzhen_game32dvd)
#include "F:\logo\fuzheng\fuzhen_game32dvd.c"
#elif(CUSTOM_LOGO == logo_fuzhen_dpf2    )
#include "F:\logo\fuzheng\fuzhen_dpf2.c"    
#elif(CUSTOM_LOGO == logo_155audi)
#include "F:\logo\fuzheng\155audi.c"


另外还要生成一个这样的文件:

#define  logo_155chery  (6)
#define  logo_155honda  (7)
#define  logo_155hyundai  (8)
#define  logo_155infiniti  (9)
#define  logo_155kia  (10)
#define  logo_155lexus  (11)

像这些地方,都会反复地用到一些子字符串,然后用到一些固定的模块。

上面列出仅仅是文件的片段,整个完整的代码有200多项,如果用C+C和C+V来做,会让人想发疯,所以我想到用java来做。

首先第一步就是把Code1里面的代码提炼出里面最核心的信息,也就是类似于这样:

logo_fuzhen_game32dvd,
logo_fuzhen_dpf2,    
logo_155audi,
logo_155benz,
logo_155bmw,


JAVA的代码实现是这样的:

public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fis = new FileReader("E://workspace//java//src//title.txt");
		FileWriter fos = new FileWriter("E://workspace//java//src//def1.txt");
		BufferedReader bufRead = new BufferedReader(fis);
		BufferedWriter bufWr = new BufferedWriter(fos);
		String line = null;
		
		while ((line = bufRead.readLine()) != null) {
			// line = bufRead.readLine();
			line = line.replace("//#include ", "");
			line = line.replace("F:\\logo\\fuzheng\\", "logo_");
			line = line.replace("\"", "");
			line = line.replace('-', '_');
			line = line.replace(".c", ",");
			
			System.out.println(line);
			bufWr.write(line);
			bufWr.newLine();
			bufWr.flush();
			
		};
		
		bufRead.close();
		bufWr.close();
	}


首先创建一个文件的缓冲流,然后读取一行,接下来就是用String的replace方法对输入的字符串进行修改,重要的是要把里面的'-' 改为'_',因为C语言不支持‘-’做变量,然后还要在前面加上logo_这个子字符串,是为了避免某些以数字开头的变量。

对于实现Code 2的形式的代码,我使用一个模板字符串,然后也是用replace方法对这个模板进行改造,代码如下:

String line = null;
		String line_opt = "<option>logo</option>";
		
		while ((line = bufRead2.readLine()) != null) {
			//读取一行进来,然后把'-'号改为'_'
			line = line.replace(",", "");
			line = line.replace('-', '_');
			
			//再重新构造 <option>结构
			line = line_opt.replace("logo", line);
			System.out.println(line);
			bufWr.write(line);
			bufWr.newLine();
			bufWr.flush();
		};


其余另外2个文件,也是用类似的模板的方式,构造出想要的格式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值