LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2036|回复: 5

[求助] XML文件写入的问题 困扰好几天了

[复制链接]
发表于 2006-8-2 12:56:03 | 显示全部楼层 |阅读模式
修改XML文件的一个问题
假设有一个config.xml文件,我每次读取都要更改里面的一个cout的数值
当我用普通的java程序写的时候,一切正常,但是当我把修改XML的程序做成Java Bean在Tomcat下运行的时候,每次到写入的时候老是提示找不到文件了,一直给我java.io.FileNotFoundException异常信息,不管我用的是绝对路径还是相对路径,都是一样

做了一下小的排除,就是在文件写入的时候发生的错误,实在不知道怎么解决了
很郁闷了,一个程序大体写完,然后在Tomcat上折腾了好久了,都是这个问题
贴一下代码

  1. package com.cmpp.provision;

  2. import javax.xml.parsers.*;
  3. import javax.xml.transform.Transformer;
  4. import javax.xml.transform.TransformerFactory;
  5. import javax.xml.transform.dom.DOMSource;
  6. import javax.xml.transform.stream.StreamResult;
  7. import javax.xml.transform.stream.StreamSource;

  8. import org.w3c.dom.*;

  9. public class ProvisionConfig {

  10.         public void setConfig() throws Exception {

  11.                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  12.                 DocumentBuilder db = dbf.newDocumentBuilder();
  13.                 java.io.File path = new java.io.File("/home/kevin/Tomcat4/webapps/Provision/config.xml");
  14.                 Document doc = db.parse(path);
  15.                 doc.normalize();

  16.                 readXML(doc);
  17.                
  18.                 writeXML(doc);
  19.         }
  20.         public  void readXML(Document doc) throws Exception
  21.         {
  22.                 NodeList configure = doc.getElementsByTagName("item");

  23.                 String Version = ((Element) configure.item(0)).getElementsByTagName(
  24.                                 "value").item(0).getFirstChild().getNodeValue();
  25.                 String SendDeviceID = ((Element) configure.item(1))
  26.                                 .getElementsByTagName("value").item(0).getFirstChild()
  27.                                 .getNodeValue();
  28.                 String DestDeviceID = ((Element) configure.item(2))
  29.                                 .getElementsByTagName("value").item(0).getFirstChild()
  30.                                 .getNodeValue();
  31.                 String SPID = ((Element) configure.item(3)).getElementsByTagName(
  32.                                 "value").item(0).getFirstChild().getNodeValue();

  33.                
  34.                                
  35.                 setVersion(Version);
  36.                 setSendDeviceID(SendDeviceID);
  37.                 setDestDeviceID(DestDeviceID);
  38.                 setSpid(SPID);
  39.                
  40.         }
  41.        
  42.         public  void writeXML(Document doc) throws Exception
  43.         {
  44.                 NodeList configure = doc.getElementsByTagName("item");
  45.                
  46.                 Element Count = (Element) configure.item(4);
  47.                 String count = Count.getElementsByTagName("value").item(0).getFirstChild().getNodeValue();
  48.                 int tmp = Integer.parseInt(count);
  49.                 Count.getElementsByTagName("value").item(0).getFirstChild().setNodeValue(String.valueOf(tmp+1));
  50.                 if (tmp > 1e9 - 1) {
  51.                         count = "1";
  52.                         Count.getElementsByTagName("value").item(0).getFirstChild()
  53.                                         .setNodeValue("2");
  54.                 }
  55.                
  56.                 // 保存XML的修改
  57.                 TransformerFactory tFactory = TransformerFactory.newInstance();
  58.                 Transformer transformer = tFactory.newTransformer();
  59.                 DOMSource source = new DOMSource(doc);
  60.                 java.io.File path = new java.io.File("/home/kevin/Tomcat4/webapps/Provision/config.xml");
  61.                 StreamResult result = new StreamResult(path);
  62.                
  63.                 if(path.canWrite())
  64.                         transformer.transform(source, result);
  65.                
  66.                 setTransactionID(count);
  67.         }

  68.                 private String version = "1.5.0";

  69.         private String msidsn;

  70.         private String spserviceid;

  71.         private String sendDeviceID;

  72.         private String destDeviceID;

  73.         private String spid;

  74.         private String transactionID;

  75.         public ProvisionConfig() {

  76.         }

  77.         public String getVersion() {
  78.                 return this.version;
  79.         }

  80.         public String getMsidsn() {
  81.                 return this.msidsn;
  82.         }

  83.         public String getSPServiceID() {
  84.                 return this.spserviceid;
  85.         }

  86.         public String getSendDeviceID() {
  87.                 return this.sendDeviceID;
  88.         }

  89.         public String getDestDeviceID() {
  90.                 return this.destDeviceID;
  91.         }

  92.         public String getSPID() {
  93.                 return this.spid;
  94.         }

  95.         public String getTransactionID() {
  96.                 return this.transactionID;
  97.         }

  98.         public void setVersion(String Version) {
  99.                 this.version = Version;
  100.         }

  101.         public void setSendDeviceID(String SendDeviceID) {
  102.                 this.sendDeviceID = SendDeviceID;
  103.         }

  104.         public void setDestDeviceID(String DestDeviceID) {
  105.                 this.destDeviceID = DestDeviceID;
  106.         }

  107.         public void setSpserviceid(String SPServiceID) {
  108.                 this.spserviceid = SPServiceID;
  109.         }

  110.         public void setSpid(String SPID) {
  111.                 this.spid = SPID;
  112.         }

  113.         public void setMsidsn(String MSISDN) {
  114.                 this.msidsn = MSISDN;
  115.         }

  116.         public void setTransactionID(String count) {
  117.                 String s = "0000000000" + count;
  118.                 this.transactionID = this.spid
  119.                                 + s.substring(s.length() - 10, s.length());
  120.                }
  121. }

复制代码

是在很不解
就算是我写入到一个新文件也不行,很郁闷
但是在普通的java程序里就可以
发表于 2006-8-2 13:35:51 | 显示全部楼层
把可配置文件放在webapps底下是不明智的,如果我不要求解压war怎么办!读取是可以的,但是还需要编辑,最好放到指定的配置目录
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-2 13:51:14 | 显示全部楼层
我试过把config.xml放到/目录下,但是还是不让我写,不知道为什么
是不是Tomcat的配置问题?
还有没有把程序打成war包
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-2 23:22:55 | 显示全部楼层
解决了,但是还是不知为什么
将一下代码改为

  1. java.io.File path = new java.io.File("/home/kevin/Tomcat4/webapps/Provision/config.xml");
  2. StreamResult result = new StreamResult(path);
复制代码

  1. java.io.File path = new java.io.File("/home/kevin/Tomcat4/webapps/Provision/config.xml");
  2. StreamResult result = new StreamResult(path.toURI().getPath());
复制代码

这样就可以了,不知道为什么要绕这样一圈
回复 支持 反对

使用道具 举报

发表于 2006-8-17 22:26:50 | 显示全部楼层
应该用this.getClass().getResourceAsStream().......,
回复 支持 反对

使用道具 举报

发表于 2006-9-2 09:37:14 | 显示全部楼层
Post by 空心菜
应该用this.getClass().getResourceAsStream().......,

这个和类的classLoader有关,不同的服务器得到的结果可能不一样。。。 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表