永发信息网

java开发中图片文件.plist怎么解析

答案:2  悬赏:60  手机版
解决时间 2021-03-19 00:47
  • 提问者网友:藍了天白赴美
  • 2021-03-18 06:34
java开发中图片文件.plist怎么解析
最佳答案
  • 五星知识达人网友:逐風
  • 2021-03-18 07:26
首先导入各种需要的包:
import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.*;
读取图片的方法如下:
Image[] array = new Image[10];
Image image = ImageIO.read(new File("d:\\source.gif"));//根据你实际情况改文件路径吧
array[0] = image;
图片读出来了。

如果你有一个Image对象,想把它写入文件可以这样做:
BufferedImage image = ImageIO.read(new File("d:\\source.gif"));
//要想保存这个对象的话你要把image声明为BufferedImage 类型
ImageIO.write(image, "png", new File("f:\\test.png"));
全部回答
  • 1楼网友:慢性怪人
  • 2021-03-18 08:31
DOM解析比较麻烦 因为element getChildNodes 会获取到text对象。而这个对象可能是一个空白字符解析起来异常麻烦! DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。 DOM 解析器把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。用 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的 XML 文件的时候。由于它的遍历能力,DOM 解析器常用于 XML 文档需要频繁的改变的服务中。 SAX 解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 DOM [树型结构] SAX [事件驱动型] 于是采用SAX解析!网上有人写过,但存在些问题,于是自己做了修改测试!放出代码如下: [java] view plain copy package logame.core; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Stack; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class PlistHandler extends DefaultHandler { private boolean isRootElement = false; private boolean keyElementBegin = false; private String key; Stack<Object> stack = new Stack<Object>(); private boolean valueElementBegin = false; private Object root; @SuppressWarnings("unchecked") public HashMap<String, Object> getMapResult() { return (HashMap<String, Object>) root; } @SuppressWarnings("unchecked") public List<Object> getArrayResult() { return (List<Object>) root; } @Override public void startDocument() throws SAXException { System.out.println("开始解析"); } @Override public void endDocument() throws SAXException { System.out.println("结束解析"); } @SuppressWarnings("unchecked") @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // System.out.println(uri+"startElement:"+qName); if ("plist".equals(qName)) { isRootElement = true; } if ("dict".equals(qName)) { if (isRootElement) { stack.push(new HashMap<String, Object>());// 压栈 isRootElement = !isRootElement; } else { Object object = stack.peek(); HashMap<String, Object> dict = new HashMap<String, Object>(); if (object instanceof ArrayList) ((ArrayList<Object>) object).add(dict); else if (object instanceof HashMap) ((HashMap<String, Object>) object).put(key, dict); stack.push(dict); } } if ("key".equals(qName)) { keyElementBegin = true; } if ("true".equals(qName)) { HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek(); parent.put(key, true); } if ("false".equals(qName)) { HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek(); parent.put(key, false); } if ("array".equals(qName)) { if (isRootElement) { ArrayList<Object> obj = new ArrayList<Object>(); stack.push(obj); isRootElement = !isRootElement; } else { HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek(); ArrayList<Object> obj = new ArrayList<Object>(); stack.push(obj); parent.put(key, obj); } } if ("string".equals(qName)) { valueElementBegin = true; } } @SuppressWarnings("unchecked") @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("characters:"); if (length > 0) { if (keyElementBegin) { key = new String(ch, start, length); System.out.println("key:" + key); } if (valueElementBegin) { if (HashMap.class.equals(stack.peek().getClass())) { HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek(); String value = new String(ch, start, length); parent.put(key, value); } else if (ArrayList.class.equals(stack.peek().getClass())) { ArrayList<Object> parent = (ArrayList<Object>) stack.peek(); String value = new String(ch, start, length); parent.add(value); } System.out.println("value:" + new String(ch, start, length)); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("plist".equals(qName)) { ; } if ("key".equals(qName)) { keyElementBegin = false; } if ("string".equals(qName)) { valueElementBegin = false; } if ("array".equals(qName)) { root = stack.pop(); } if ("dict".equals(qName)) { root = stack.pop(); } } } 调用也相对比较简单: [java] view plain copySAXParserFactory factorys = SAXParserFactory.newInstance(); SAXParser saxparser = factorys.newSAXParser(); PlistHandler plistHandler = new PlistHandler(); saxparser.parse(uri, plistHandler); HashMap<String, Object> hash = plistHandler.getMapResult(); ArrayList<Object> array = (ArrayList<Object>)plistHandler.getArrayResult(); 返回可以是一个 dict 也可以是一个array根据自己的格式获得。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯