用FileReader加上BufferedReader试一试
用BufferedReader的readLine()

解决方案 »

  1.   

    楼上的朋友,我试过了,由于document没有提供write  buffer[]的接口,我只能将用Bufferreader读到的数据先转化我字符串形式再赋给nodevalue;但这样写进去的字母仍然是字母形式,而汉字变为乱码
    并且再把它读成文件的时候,我用的是bufferwriter.write();这个方法一次最多只能写16K的东西,我是把一个字符串赋给bufferwriter.write()方法写的,由于串大,写不完整
    郁闷!
    有没有将串读到缓冲的方法啊,请帮忙!
      

  2.   

    我要把一些记录条目打包为xml文件,比如一本书,它包括:书名,作者,出版单位,出版日期,价格等,这些东西可以用document很轻松的打进去,现在碰到的问题就是如何把书的内容打包进去,书的内容可能包括文本,图片,还有音频视频等,就是说如何把这些文本,图片,音频,视频等文件打包进去,不能用链接,要把实际的内容打包进去,我用的是document,到现在找不到办法,楼上的朋友清楚了没?
    谢谢帮忙!
      

  3.   

    xml中传输2进制文件一般要经过base64编码,因此是有效率损失的,因此你需要根据你的数据量全面评估。另外,即使创建xml文档也没必要用DOM创建,应该直接写字符串标签。以提高效率。
    你不会要用xml传输一个电影吧。:)
      

  4.   

    说实在的如果可以的话,现在做的这个东西最好能再xml里包装一个比较大的多媒体文件;现在就是要把多媒体文件打包到xml文件中;目前位置已经可以写小文件了,我使用dom写标签,然后用流将文件读成串经过base64编码赋给一个标签做为其内容,不过遗憾的是只能打包比较小的多媒体文件,如果大了就很难解析,因为在java中用dom解析xml时,不想在.net中有专门的xmltextreader()方法可以读取xml文件中的任何字段;在java中只能将一个标签值以串的形式一次读出,但如果多媒体文件太大,则这个串也太长,在虚拟机内容受限的情况下,无法缓冲这个超长串而导致内存溢出!如果能找到一个可以将串一段一段读取的方法就好了!但stringreader是不行的,它在读取时也要将整个串传给它,还是要去整个串的内容,必然也会溢出!希望大家讨论讨论!
    谢谢usabcd!
      

  5.   

    谢谢各位的支持!我写了一个用xsd文件验证xml文件格式的方法,如下:/**
       * 使用xsd验证xml
       * @param xmlfilename String xml文件 包括路径
       * @param xsdfilename String  xsd文件 包括路径
       * @param validatesuccess boolean 是否验证成功 成功返回true,
       * @return boolean 成功返回true 失败返回false
       */
      public boolean validatexmlbyxsd(String xmlfilename,String xsdfilename,boolean validatesuccess){    File xmlfile=new File(xmlfilename);
        File xsdfile=new File(xsdfilename);
        //检测原文件和验证文件是否存在
        if(!((xmlfile.exists())&&(xsdfile.exists())))
          return false;
        final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
        final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
        final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";    SAXParserFactory factory=SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(true);    try{
          SAXParser parser=factory.newSAXParser();
          parser.setProperty(SCHEMA_SOURCE,xsdfile);
          parser.setProperty(SCHEMA_LANGUAGE,XML_SCHEMA);
          //parser.setProperty(SCHEMA_SOURCE,xsdfile);
          parser.parse(xmlfile,new DefaultHandler());
          validatesuccess=true;
        }catch(SAXNotRecognizedException ex){
        System.err.println("未知的属性异常:"+ex.getMessage());
        validatesuccess=false;
        }catch(SAXNotSupportedException ex){
        System.err.println("不支持的属性:"+ex.getMessage());
        validatesuccess=false;
        }catch(ParserConfigurationException ex){
        System.err.println("您的解析器不是jaxp 1.2所支持的"+ex.getMessage());
        validatesuccess=false;
        }catch(SAXException ex){
        System.err.println("您的解析器不是jaxp 1.2所支持的"+ex.getMessage());
        validatesuccess=false;
        }catch(IOException ex){
        System.err.println(""+ex.getMessage());
        validatesuccess=false;
        }catch(Exception ex){
        System.err.println(ex.getMessage());
        validatesuccess=false;
        }
        return validatesuccess;
      }但好像这个方法不起作用,即使格式明显不对,也会返回true!希望各位帮忙看看,给点意见,谢谢!
      

  6.   

    Base64编码处理。
    想一想邮件的内容是如何处理的。
      

  7.   

    如果你的文件大于数兆,那么,肯定要将效率摆到首位,根本就不能这样做了。必须直接传2进制文件。 xml中仅放入一个文件链接。另,schema 的验证不是这样用的,要用xml reader 并且必须指定一个ErrorHandler            SAXParser parser = factory.newSAXParser();
                parser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
                parser.setProperty(SCHEMA_SOURCE, xsdfile);            XMLReader xmlReader = parser.getXMLReader();
                xmlReader.setContentHandler(new DefaultHandler());
                xmlReader.setErrorHandler(new MyErrorHandler(System.out));
                xmlReader.parse("file:/D:/test/xml/test.xml");
      

  8.   

    谢谢usabcd!你说的一点也不错,如果将多媒体内容直接打包进xml文件(文件内容以base64)编码保存,再写入时没问题,但解析时,我用的是document解析,必须将xml中base64格式的多媒体 内容导出成一个string,但java虚拟机的内存是有限的,这个string太大,导致内存溢出!
    我测试过,如果多媒体源文件大于5M,则打包后的xml文件久会达到7、8M,解析时会内存溢出!我正在做xml的验证,我试了一下xmlreader,的确应该这样做!但严重时出现一个问题,不得其解,希望不吝赐教!
    xml的头是这样写的
    :<?xml version="1.0" encoding="UTF-8" ?> 
    - <!-- 电子文件--> 
    - <WJGL xmlns="http://www.titans.com/PYXmlWJ.xsd">
    xsd文件头是这样写的:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema id="WJGL" targetNamespace="http://www.titans.com/PYXmlWJ.xsd" elementFormDefault="qualified" 
    attributeFormDefault="qualified" xmlns="http://www.titans.com/PYXmlWJ.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    验证时总是出现一个错误:src-resolve.4.2: Components from namespace 'http://www.w3.org/2001/XMLSchema' are not referenceable from schema document 'null'.
    这是什么问题啊?
      

  9.   

    不清楚,你把xml和xsd贴完整看看(可以自己稍微简化一下)。
      

  10.   

    那个验证是因为在xsd代码中有些类型定义写错导致的,现在不过在验证程序中,必须有这句: xmlReader.setErrorHandler(new MyErrorHandler(System.out));但时其中那个errorhandler必须自己定义个类才能实现,这样我写的代码就又多了一个类,并且这个类的继承errorhandler类,可我想把我写的代码都归结到一个类中,有没有不用重建类就可以实现errorhandler的方法???但又不能直接new一个,因为系统中那个是抽象类???
    小弟在这里还有一个文件加密的帖子,希望各位又兴趣的去看看!
      

  11.   

    errorhandler是个接口,你就在这个类里面写一个class实现它,又不麻烦。
    如果你实在不想写,网上满世界都是。自己去抄一个。
      

  12.   

    谢谢各位的帮忙,特别是usabcd,有兴趣的话去看看有关文件加密的帖子哦!!
    我们共同研究!!!
      

  13.   

    二进制数据会遇xml的encoding有冲突
    最好是用base64编码后加入
    或者用<![CDATA[  .. ]]>
      

  14.   

    cteng,有没有用<!CDATA[]>操作的详细的方法?我用的是base64,但在读取时由于文件内容在xml标签直径以base64编码方式保存的,只能以字符的形式读取,但这个串如果太大,则就是访问这个串都很困难,内存的有限性根本不允许这样做!有没有更好的解决方法,除了上面usabcd说的保存文件路径的方法!我把文件保存到xml中主要是为了存储方便,而不是为了传输!有没有更好的解决办法啊!