本文主要是介绍Dom4j 写文件不全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天用dom4j 写文件,要么写文件不全,要么文件为空。
刚开始有问题的是:
package com.zhangyue.translate;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;/*** Created by zy on 2019/3/21.*/
public class TranslateStringXml {public static void main(String[] args) {translateAndroidXmlString("F:\\github\\AndroidStringTranslate\\src\\res\\strings.xml","F:\\github\\AndroidStringTranslate\\out\\result.xml");}public static void translateAndroidXmlString(String sourcePath,String outPath){// 解析xmlSAXReader reader = new SAXReader();Itranslate translate = new YouDaoTranslate();try {// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。Document document = reader.read(new File(sourcePath));// 通过document对象获取根节点bookstoreElement rootElement = document.getRootElement();// 通过element对象的elementIterator方法获取迭代器Iterator it = rootElement.elementIterator();// 遍历迭代器,获取根节点中的信息while (it.hasNext()) {Element element = (Element) it.next();String name = element.attribute("name").getValue();String value = element.getStringValue();System.out.println(name + "-"+ value);element.setText(translate.translate(value));
// element.setText("1111");}System.out.println(document.asXML());document.write(new FileWriter(outPath));} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
修改之后:
package com.zhangyue.translate;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;/*** Created by zy on 2019/3/21.*/
public class TranslateStringXml {public static void main(String[] args) {translateAndroidXmlString("F:\\github\\AndroidStringTranslate\\src\\res\\strings.xml","F:\\github\\AndroidStringTranslate\\out\\result.xml");}public static void translateAndroidXmlString(String sourcePath,String outPath){// 解析xmlSAXReader reader = new SAXReader();Itranslate translate = new YouDaoTranslate();try {// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。Document document = reader.read(new File(sourcePath));// 通过document对象获取根节点bookstoreElement rootElement = document.getRootElement();// 通过element对象的elementIterator方法获取迭代器Iterator it = rootElement.elementIterator();// 遍历迭代器,获取根节点中的信息while (it.hasNext()) {Element element = (Element) it.next();String name = element.attribute("name").getValue();String value = element.getStringValue();System.out.println(name + "-"+ value);element.setText(translate.translate(value));
// element.setText("1111");}System.out.println(document.asXML());FileWriter writer = new FileWriter(outPath);document.write(writer);writer.flush();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
原因:
document.write(new FileWriter(outPath));
这里我直接写,但是并没有把内存中的数据刷到存储设置里面。
需要这样改:
FileWriter writer = new FileWriter(outPath);document.write(writer);writer.flush();
当时我还以为,没有io exception ,怎么会写不成功?
后来我发现,System.out.println(document.asXML());
打印出来都是正常的。
后来想到io 的缓存特性。好吧。
记住,io 要么用完要关闭,或者flush.
这篇关于Dom4j 写文件不全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!