比如说在struts2框架下,我的action从前台页面接受到某个值,在action中做了该值的条件判断以后。 举个栗子: public String test(){ String aaa = getRequest().getParameter("para"); if(aaa.equals("bbb")){ String add = "I want to add the text"; //接下来我该怎么样把字符串add通过系统的文件操作 //自动写入.../test.java文件中的某个占位里 } return "aaa"; } 将add写入…/test.java中: public String test(){ testStart //I want to add the text写入这里 endStart return "ccc"; } 有办法实现这样的效果吗? |
|
10分 |
有的,spring的aop(动态代理),你可以看下
|
spring不太会用。。。有没有对现有框架没有影响的办法 |
|
有肯定能实现,java支持动态编译,但是会比较麻烦。你需要组织文件内容生成文件,再编译,再加载class。
不知道楼主为什么会有这种需求,一般的方法,接受参数应该都可以实现楼主的要求。 请问楼主做这个的目的是什么? |
|
写一个自动生成代码的工具。。。因为生成文件的方法上面很多输出流的编写,而我们在实际编码中经常会遇到一些条件的判断,比如,可能要引入某个js或者在action中查出某些需要用到的结果集。在生成代码前就需要我们去填写一些调用的参数,通过这些参数判断是否需要向生成的文件中追加某行代码。 |
|
自己顶,有大神知道如何实现吗?
|
|
动态编译可以,3楼正解。
但问题是楼主到底想做什么,感觉应该有其他更好的解决方法,比如反射、接口、泛型。 要考虑到,这样去实现效率很低,说不定请求都超时了。 建议楼主把本来的需求说的更明白一点,而不是自己想了一个不是很恰当的解决方法然后来问后者。 |
|
1,利用IO流将test.java文件拷贝一份,命名为test.txt。
2,读写test.txt文本内容楼主会吧,将字符串插入到你想要插入的位置 3,将text.java文件删除,将text.txt文件用IO流拷贝一份,文件名为text.java 4,将text.txt删除 |
|
感谢您的回复 |
|
最简单粗暴没效率的方法是 留一个诸如//$001之类的注释 然后读取出来replace掉 你需要后续加上去的话只要在替换的时候末行留个标记就行了
|
|
10分 |
如果想有效率一点 使用RandomAccessFile记录游标进行写入
|
10分 |
如果这个指定文件是java源码,你写完肯定想编译。
文件可以全部读进内存,操作完字符串整体写回。 编译可以用Runtime类调命令行编译器。 调用可以Class.forName取得Instance然后反射调用预定接口 |
10分 |
原始设计就不够好,为什么不用jvm支持的脚本语言来做,Jython或groovy?
import groovy.lang.GroovyShell; Binding binding = newBinding(); //传递参数 binding.setVariable("x",10); binding.setVariable("language", "Groovy"); GroovyShell shell = newGroovyShell(binding); //调用,返回值为10 Object value =shell.evaluate ("println"Welcome to $language"; y = x * 2; z = x * 3; return x "); |
嵌入脚本做DSL在有些场景下是唯一解
|