快哭了,搞3天了,谁有好的解决办法啊。。
最近再做一个swing项目,基本上都做完,马上要给客户使用了。
我把这个项目用exe4j打成了exe文件,由于数据库连接都是写在jdbc.properties里的,boss说客户的数据库和用户名和密码随时更改,需要做个窗口让他们改。于是我写了一个读取和修改jdbc.properties的类,用eclipse执行没任何问题,但是把项目打成jar包,再打成exe文件,就只能读取到jdbc.properties里的信息了,不能修改了。下面是代码
[code=Java]
PropertiesUtil propUtil = new PropertiesUtil();
Properties prop = propUtil.getProperties();
prop.setProperty( "url ", JDBC + upForm.getUrl() + HOST);
prop.setProperty( "username ", upForm.getUsername());
prop.setProperty( "password ", upForm.getPassword());
URL url = this.getClass().getResource(PropertiesUtil.FILEPATH);
OutputStream fos = new BufferedOutputStream(new FileOutputStream(url.getPath()));
prop.store(fos, "url ");
[/code]
接着我又换了一种方法,修改程序打成jar里的文件,这样读取和修改也没问题,最后打成exe程序后,找不到jar的路径,因为jar已经被打成exe了,不知道怎么找到exe里jar的路径。。。
[code=Java]
JarFile jf = new JarFile(System.getProperty( "user.dir ") + "/itgc.jar ");
TreeMap tm = new TreeMap();
Enumeration es = jf.entries();
while (es.hasMoreElements()) {
JarEntry je = (JarEntry) es.nextElement();
byte[] b = getByte(jf.getInputStream(je));
tm.put(je.getName(), b);
}
JarOutputStream out = new JarOutputStream(
new FileOutputStream(file));
[/code]
以上2种办法始终不能解决,我又想把jdbc.properties放在某个盘的文件夹下,然后去读取,不存在的话就在这个盘里自动创建。但是问题又来了,我用的是spring加载 , <context:property-placeholder location= "classpath:jdbc.properties "/>
这里的classpath:jdbc.properties貌似只能加载项目下class文件下的路径。
<context:property-placeholder location= "classpath:c:\data\jdbc.properties "/> 这样是读取不到的。。。
三种方法告破全部失败,这下完了。如果客户安装的数据库和密码和我配置文件里的不一样,他们想改都难。。
不知道诸位有没有做过cs程序,修改exe里的文件方案啊???
[解决办法]
哥教你一个绝招,不要用配置文件,用System.setProperty("xxxx_url","");System.setProperty("xxxx_password","");
用的时候System,getProperty取出来
[解决办法]
其实问题很简单。如果想客户可以修改某些值。必须有一个外部文件供读取。你目前局限于用固定的方法去读,为什么不尝试自己写个读文件的方法呢。其他参数不管,只要客户想改的地方自己读取,其他的变量仍然用原来的方法就行啊。
[解决办法]
你这个设置的值从什么地方读来的呢?