java 将list集合通过窗口写入文件 RCP

这是在EclipseRCP编程中使用的部分导入类,其他使用ctrl+o自行导入

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

 

保存文件到本地xml文件 

本实验实例EntityElement,其中属性有id,name,parentId

public void run() {
			FileDialog fileDialog = new FileDialog(PlatformUI.getWorkbench()
					.getActiveWorkbenchWindow().getShell(), SWT.SAVE);
			fileDialog.setFilterNames(new String[] { "Text Files",
					"Both Files", "All Files" });
			fileDialog.setFilterExtensions(new String[] { "*.xml", "*.*" });
			String filename = fileDialog.open();
			System.out.println(filename);//文件存储的绝对路径
			try {
				// 第一步:创建DOM树
				DocumentBuilderFactory dbf = DocumentBuilderFactory
						.newInstance();
				DocumentBuilder db = dbf.newDocumentBuilder();
				Document document = db.newDocument();
				document.setXmlStandalone(true);
				// 第二步:完善树结构
				// 创建节点
				Element Tree = document.createElement("Tree");
				List<EntityElement> input = new ArrayList<EntityElement>();
				input = getEntity(templist, input);
				for (EntityElement element : input) {
					Element node = document.createElement("node");
					Element id = document.createElement("id");
					Element name = document.createElement("name");
					Element parentId = document.createElement("parentId");
					// 设置节点的属性、内容
					id.setTextContent("" + element.getId());
					name.setTextContent(element.getName());
					parentId.setTextContent(element.getParentId());
					// 将子节点添加到父节点
					node.appendChild(id);
					node.appendChild(name);
					node.appendChild(parentId);
					Tree.appendChild(node);
				}
				document.appendChild(Tree);
				// 第三步:将树结构导入本地文件中
				TransformerFactory tff = TransformerFactory.newInstance();
				Transformer tf = tff.newTransformer();
				tf.setOutputProperty(OutputKeys.INDENT, "yes");// 节点换行
				tf.transform(new DOMSource(document),
						new StreamResult(filename));
			} catch (Exception e) {
				e.printStackTrace();
			}

		}

本地xml文件数据如下

<?xml version="1.0" encoding="UTF-8"?><Tree>
<node>
<id>1</id>
<name>员工管理</name>
<parentId>root</parentId>
</node>
<node>
<id>2</id>
<name>员工档案</name>
<parentId>员工管理</parentId>
</node>
<node>
<id>2</id>
<name>员工薪资</name>
<parentId>员工管理</parentId>
</node>
<node>
<id>1</id>
<name>产品管理</name>
<parentId>root</parentId>
</node>
<node>
<id>2</id>
<name>产品分析</name>
<parentId>产品管理</parentId>
</node>
<node>
<id>2</id>
<name>产品报价</name>
<parentId>产品管理</parentId>
</node>
<node>
<id>3</id>
<name>短信网址</name>
<parentId>产品报价</parentId>
</node>
<node>
<id>3</id>
<name>传统网站</name>
<parentId>产品报价</parentId>
</node>
<node>
<id>3</id>
<name>wap网站</name>
<parentId>产品报价</parentId>
</node>
</Tree>

 

 

 导入本地xml文件,获取一个list集合

public List<EntityElement> getAll(String fileName) throws Exception {
			// 将给定 URI 的内容解析为一个 XML 文档,并返回Document对象
			DocumentBuilder db = null;
			List<EntityElement> entitys;
			DocumentBuilderFactory dbFactory;
			dbFactory = DocumentBuilderFactory.newInstance();
			db = dbFactory.newDocumentBuilder();
			Document document = db.parse(fileName);
			// 按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList
			NodeList entityList = document.getElementsByTagName("node");
			entitys = new ArrayList<EntityElement>();
			// 遍历集合
			for (int i = 0; i < entityList.getLength(); i++) {
				EntityElement element = new EntityElement();
				// 获取第i个结点
				org.w3c.dom.Node node = entityList.item(i);
				// 获取结点的子节点,包含了Test类型的换行
				NodeList cList = node.getChildNodes();
				// 将一个实体里面的属性加入数组
				ArrayList<String> contents = new ArrayList<>();
				for (int j = 1; j < cList.getLength(); j += 2) {
					org.w3c.dom.Node cNode = cList.item(j);
					String content = cNode.getFirstChild().getTextContent();
					contents.add(content);
				}

				element.setId(Integer.parseInt(contents.get(0)));
				element.setName(contents.get(1));
				element.setParentId(contents.get(2));
				entitys.add(element);
			}

			return entitys;
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值