【问题标题】:Write a xml in java用java写一个xml
【发布时间】:2015-01-12 11:32:37
【问题描述】:

我需要编写一个xml文件,该文件位于191.160.100.122/Test/conf/test.xml

我使用的java代码是,

public static void writeXml(PropertyForm propForm , LinkedList flaglist , LinkedList list){

    try{
        String filePath = "http://191.160.100.122/Test/conf/test.xml";
        URL url = new URL(value);
        URLConnection con = url.openConnection();
        con.setDoOutput(true);
        OutputStream os = con.getOutputStream();


        XMLStreamWriter writer = factory.createXMLStreamWriter(os);

        writer.writeStartDocument();
        writer.writeStartElement("xmldata");

        writer.writeStartElement(propForm.getBuss_hrs_name());
        writer.writeStartElement("StartTime");
        writer.writeCharacters(propForm.getBuss_hrs_start());
        writer.writeEndElement();
        writer.writeStartElement("EndTime");
        writer.writeCharacters(propForm.getBuss_hrs_end());
        writer.writeEndElement();

        writer.writeEndElement();

        writer.writeStartElement("Messages");
        for(int i=0;i<flaglist.size();i++){
            System.out.println("======flag=====");
            System.out.println(flaglist.get(i).getPname().length()+"---"+ flaglist.get(i).getPname()+"---"+flaglist.get(i).getKey()+"---"+flaglist.get(i).getVal());

            writer.writeStartElement(flaglist.get(i).getKey());

            writer.writeCharacters(flaglist.get(i).getVal());
            writer.writeEndElement();


        }
        writer.writeEndElement();
        for(int j=0;j<list.size();j++){
            if(list.get(j).getPname()!=null && list.get(j).getPname().equals("Holiday")){
                System.out.println(list.get(j).getPname()+"---"+list.get(j).getKey()+"---"+list.get(j).getVal());

                writer.writeStartElement(list.get(j).getPname());
                writer.writeStartElement("Date");
                writer.writeCharacters(list.get(j).getVal());
                writer.writeEndElement();
                writer.writeStartElement("Name");
                writer.writeCharacters(list.get(j).getKey());
                writer.writeEndElement();

                writer.writeEndElement();

            }
        }
        writer.writeEndDocument();

        writer.flush();
        writer.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

上面的代码运行没有任何异常。但是文件写入过程没有完成。

请帮我解决这个问题。

【问题讨论】:

标签: java xml file remote-access fileoutputstream


【解决方案1】:

这通常不是网络服务器的行为方式,也不是您向它们发布内容的方式。

当您对191.160.100.122/Test/conf/test.xml 执行 HTTP GET 时,您正在与位于端口 80 的 191.160.100.122 的网络服务器联系,并要求它为您提供名称为 /Test/conf/test.xml 的资源。服务器如何处理这个请求,并决定返回什么,完全取决于服务器是什么,以及它是如何配置的。 (它可能从目录中读取文件,或者运行一些数据库查询,或者执行一些代码,或者理论上任何东西。)

您需要查看服务器是什么,并弄清楚如何使它从该请求返回不同的结果 - 然后然后设置您的“编写器”进程以执行任何必要的操作返回新数据。


FWIW 您当前的代码没有“失败”,因为它没有按照您的想法做。您正在打开与上述 URL 的连接,然后通过此连接将内容发送到服务器。该请求是“成功的”,只要它没有错误地完成。但是一般不能保证服务器会对您提供的这些数据做任何特别的事情,尤其是不是您所期望的。 (事实上​​,除非您显式打开 HTTP PUT 连接(而不是默认的 GET),否则服务器根据该请求修改任何内容都是一个坏主意。)

【讨论】:

  • 感谢您的回答。你能给出任何想法来满足我的要求吗?
  • 您可能想要使用其他协议,例如 ftp 或 scp,而不是 http。
  • @HumanBeing 正如我所说,它完全取决于您要连接的网络服务器是什么。如果它类似于简单的 Apache 服务器,那么您需要在服务器硬盘驱动器的特定目录中创建一个文件,使用类似 scp 的东西(如 Moh-Aw 建议的那样)。但如果是例如一个 Java servlet 容器,那么这根本不起作用,并且没有“开箱即用”的方法可以在这种情况或许多其他情况下起作用。
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多