用java的文件流功能来简化修改代码的重复劳动
2014-05-06 13:29
399 查看
作为一个软件工程师,有一个优势就是有些工作,普通人只能用重复的Ctrl+C和C+V来做,而你则可以用for循环来做。
而java真的比C要好的多,当然用C也能写一个可执行程序去帮你做这种重复劳动,但java显然更加便利,因为只有使用过才体会得到。
事情是这样的,最近要改写一个代码,用自动生成的definition去实现一套嵌入式软件的功能定制,有兴趣请参看我另外一篇博文http://blog.csdn.net/johnny_nass_hu/article/details/25103891
要实现自动化定制,原本的代码有一个地方的改动量比较大,那就是用户开机画面的选择,由于历史的原因,这款软件定制的用户界面有200多个画面,也就是头文件里面有200多个include的语句,鉴于用文字无法讲得清楚,我还是贴一部分代码出来吧:
我们要把这些代码改造成这样:
另外还要生成一个这样的文件:
像这些地方,都会反复地用到一些子字符串,然后用到一些固定的模块。
上面列出仅仅是文件的片段,整个完整的代码有200多项,如果用C+C和C+V来做,会让人想发疯,所以我想到用java来做。
首先第一步就是把Code1里面的代码提炼出里面最核心的信息,也就是类似于这样:
J***A的代码实现是这样的:
首先创建一个文件的缓冲流,然后读取一行,接下来就是用String的replace方法对输入的字符串进行修改,重要的是要把里面的'-' 改为'_',因为C语言不支持‘-’做变量,然后还要在前面加上logo_这个子字符串,是为了避免某些以数字开头的变量。
对于实现Code 2的形式的代码,我使用一个模板字符串,然后也是用replace方法对这个模板进行改造,代码如下:
其余另外2个文件,也是用类似的模板的方式,构造出想要的格式。
而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,
J***A的代码实现是这样的:
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个文件,也是用类似的模板的方式,构造出想要的格式。
相关文章推荐
- (java 功能代码) java 去除List 重复数据之基本数据类型
- (Java 功能代码)java去除List中重复数据之Object对象
- Eclipse中的java、xml代码提示功能设置
- 修改Putty 0.6 代码支持SSH 密码保存功能 .
- (Java 功能篇) java 字符串数组筛选重复数据
- Java之hashSet实现引用类型的禁止重复功能
- 巧用alias命令 - 简化开发工作中的重复劳动
- Eclipse下设置tomcat,修改Java代码不必重启tomcat
- 修改sql developer的代码提示功能
- java代码实现ajax 顶和踩功能。
- Java实现对中文字符串的排序功能实例代码
- [置顶] Android开发之SDCardUtils工具类。java工具详细代码,附源代码。判断SD卡是否挂载等功能
- CharacterEncodingFilter.java以及修改web.xml所用代码
- Lombok 简化java代码注解
- 用Java代码实现改变一个文本中的内容,即将一个文本里的内容修改内容,并存储到另一个文本中
- [编写高质量代码:改善java程序的151个建议]建议79 HashMap中的key不要重复
- (jsp 和 servlet功能篇) jsp+servlet+javaBean 实现分页代码(mysql 数据库)
- 20个开发人员非常有用的Java功能代码
- Java实现对中文字符串的排序功能实例代码
- 代码实现拨打电话的功能后,用真机调试时,出现异常:java.lang.SecurityException: Permission Denial...