对于java的文件的存在形式,最重要的有txt与xml两种。对于txt格式文件,一般就放在项目文件夹下,也就是跟配置文件同等级,而对于XML文件则是放在src文件夹下(src文件夹就是资源文件的意思),txt文件使用File类的相关类就可以进行读写,而XML在src文件夹下则是使用projectname.class.getClassLoader().getResourceAsStream()进行资源读取,但是在写的时候则不大一样,其实txt文件放在src文件夹下不能写,而XML文件也是不行。这个问题估计是因为src文件夹是资源文件夹的缘故。
其实真正的问题也就是XML文件的读写而已。所以java有好些XML文件解析器,大致上有SAX,DOM,DOM4J,JDOM,JAXP等。
其实所有的解析器都是源于SAX与DOM的,同时后面发展出的解析器各有所长但是同样的存在缺陷。
注意,SAX使用中,含有Document标志的方法就是操作整个XML文件的方法,而含有Element标志的方法就是操作
注意,DOM解析关键方法在于Document.getDocumentElement(),Node.getNextSibling(),Node.getChildNodes(),Node.getAttributes(),常用方法就是Node.getNodeType(),Node.getNodeName(),Node.getNodeValue(),这里Node.getNodeType()用于判断节点类型,例如Node.ELEMENT_NODE,Node.TEXT_NODE这两种类型就分别对应了上面的两种情况Node.ELEMENT_NODE对应
对于DOM解析中纯字符甚至是空白字符的Node节点可以使用Node.getTextContent()得到内容。
至于PULL解析,其实反而是最简单的。Pull解析是以<,>为分割符的,所以同样需要考虑空白符的存在,也就是说空白符被当成解析元素处理。这里Pull解析每一种解析元素都有对应的常量对应。实际使用中,我们使用getName(),getAttributeName(),getAttributeValue(),getText(),next()等方法来得到想要的。next()可以移动到下一个元素。getName()可以得到元素名,例如
(注意SAX使用的是SAXTransformerFactory进行写XML操作。DOM使用TransformerFactory进行写XML操作。SAX是基于流的操作,DOM是基于树结构的操作。两者的操作很相似,可以相互对照加强操作XML文件的类的掌握。)
JAXP其实就是一些接口,包括SAX,DOM,XSLT,并定义了Source(DOMSource,SAXSource,StreamSource)与Result(DOMResult,SAXResult,StreamResult)接口进行输入输出,也就是说JAXP的使用上,就相当于SAX与DOM而已。因此并未予以采用。其实简单点说,就是JAXP就是DOM与SAX的集合而已,JAXP并未增加新方法或者功能,但是却可以使得SAX与DOM处理一些问题变得简单,JAXP本身就是API。(JAXP本身不提供任何的XML解析支持,同时依赖于解析器,但又不跟解析器耦合,因此可以任意切换解析器而无需修改源代码)
JDOM与DOM相像,但是却有好些不同之处。JDOM与DOM都是很好内存的,超10M则溢出,这点就移动平台来说,耗内存是很麻烦的,但是操作的简便性很好。JDOM使用的也是DOM与SAX结合的方式,但是JDOM的DOMBuilder所得到的Document结构是不一样的,并且JDOM存在SAXBuilder,使用SAXBuilder得到Document对象。也就是说JDOM有DOMBuilder,SAXBuilder两种解析方式。同时注意JDOM本身也是融合了DOM的,解析的思想基本上就是DOM的。简单点说就是使用SAXBuilder实现Document进行解析xml文件。使用XMLOutputter进行进行xml文件的创建。
DOM4J性能是最好的,但是可移植性不好。DOM4J读取XML文件有两种,分别是DOMReader与SAXReader,而写XML文件则是使用XMLWriter。同时使用的是将整个XML文件看成是一个Document对象进行操作,就像DOM一样。DOM4J需要下载操作所需的包。使用DocumentHelper进行文档创建。(DOM4J其实为解析XML文件提供了4个解析器,分别是SAXReader,DOMReader,XPPReader,XPP3Reader)(在创建Document上也有两个选择分别是DocumentFactory,DocumentHelper,使用createDocument()方法即可创建,其中DocumentHelper最为常见,也很好用)
这里使用dom4j进行xml方面的文件操作,以减少资源消耗,增加运行效率,简化操作。
(文件操作的包装类是乱码的根源)
(未完成)