- 浏览: 449161 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
supertangcugu:
文中有个错误,SoftReference是软引用,Strong ...
WeakReference与SoftReference -
somefuture:
我每次走到movie.draw(canvas,0, 0); ...
利用Movie播放GIF -
鞠文婷:
徐颖慧 写道为什么打不开啊?额 果然打不开了。。
50个Android开发人员必备UI效果源码[转载] -
徐颖慧:
为什么打不开啊?
50个Android开发人员必备UI效果源码[转载] -
李白625:
为什么打不开啊
50个Android开发人员必备UI效果源码[转载]
今天的项目里做了一个缓存文件 利用的就是xml
读都好说 其实写也很简单 机械化了一点 不过都是必要的
读都好说 其实写也很简单 机械化了一点 不过都是必要的
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.yolove.player.entity.AudioInfo; public class PlaylistSyncUtil { public static ArrayList<AudioInfo> list; public PlaylistSyncUtil(){ } public static void savetoLocal(ArrayList<AudioInfo> audiolist,String path){ //取得文件名 String name=path.substring(path.lastIndexOf("/")+1, path.lastIndexOf(".")); //得到xml序列化工具 XmlSerializer serializer=Xml.newSerializer(); //生成Stringwriter对象 StringWriter writer=new StringWriter(); if(audiolist.size()>0){ try { serializer.setOutput(writer); //XML文件头 serializer.startDocument("UTF-8", true); /* * 开始xml文件主体的构建 * xml的根root为playlist * 次级根为audioInfo 标识每一个单独的audioinfo对象 * 对象中的属性以<></>的格式进行存储 */ //<playlist> serializer.startTag("", "playlist"); for(int i=0;i<audiolist.size();i++){ AudioInfo info=audiolist.get(i); serializer.startTag("", "AudioInfo"); serializer.startTag("", "id"); serializer.text(info.getId()+""); serializer.endTag("", "id"); serializer.startTag("", "data"); serializer.text(info.getData()+""); serializer.endTag("", "data"); serializer.startTag("", "displayname"); serializer.text(info.getDisplayName()+""); serializer.endTag("", "displayname"); serializer.startTag("", "size"); serializer.text(info.getSize()+""); serializer.endTag("", "size"); serializer.startTag("", "dateAdded"); serializer.text(info.getDateAdded()+""); serializer.endTag("", "dateAdded"); serializer.startTag("", "dateModified"); serializer.text(info.getDateModified()+""); serializer.endTag("", "dateModified"); serializer.startTag("", "title"); serializer.text(info.getTitle()+""); serializer.endTag("", "title"); serializer.startTag("", "duration"); serializer.text(info.getDuration()+""); serializer.endTag("", "duration"); serializer.startTag("", "artistId"); serializer.text(info.getArtistId()+""); serializer.endTag("", "artistId"); serializer.startTag("", "albumId"); serializer.text(info.getAlbumId()+""); serializer.endTag("", "albumId"); serializer.startTag("", "year"); serializer.text(info.getYear()+""); serializer.endTag("", "year"); serializer.startTag("", "bookmark"); serializer.text(info.getBookMark()+""); serializer.endTag("", "bookmark"); serializer.startTag("", "lrcData"); serializer.text(info.getLrcData()+""); serializer.endTag("", "lrcData"); serializer.startTag("", "picData"); serializer.text(info.getPicData()+""); serializer.endTag("", "picData"); serializer.startTag("", "album"); serializer.text(info.getAlbum()+""); serializer.endTag("", "album"); serializer.startTag("", "artist"); serializer.text(info.getArtist()+""); serializer.endTag("", "artist"); serializer.startTag("", "lpDownOnce"); serializer.text(info.isLpDownOnce()+""); serializer.endTag("", "lpDownOnce"); serializer.startTag("", "uuid"); serializer.text(info.getUuid()+""); serializer.endTag("", "uuid"); serializer.startTag("", "type"); serializer.text(info.getType()+""); serializer.endTag("", "type"); serializer.startTag("", "smallpicurl"); serializer.text(info.getSmallpicurl()+""); serializer.endTag("", "smallpicurl"); serializer.startTag("", "bigpicurl"); serializer.text(info.getBigpicurl()+""); serializer.endTag("", "bigpicurl"); serializer.startTag("", "description"); serializer.text(info.getDescription()+""); serializer.endTag("", "description"); serializer.startTag("", "isplaying"); serializer.text(info.isPlaying()+""); serializer.endTag("", "isplaying"); serializer.startTag("", "isselected"); serializer.text(info.isSelected()+""); serializer.endTag("", "isselected"); serializer.endTag("", "AudioInfo"); } serializer.endTag("", "playlist"); serializer.endDocument(); }catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //结果字符串 // writer.toString(); boolean flag = true; BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; try { File distFile = new File(path); if(distFile.exists()){ distFile.delete(); } bufferedReader = new BufferedReader(new StringReader(writer.toString())); bufferedWriter = new BufferedWriter(new FileWriter(distFile)); char buf[] = new char[1024]; //字符缓冲区 int len; while ((len = bufferedReader.read(buf)) != -1) { bufferedWriter.write(buf, 0, len); } bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); flag = false; } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public static ArrayList<AudioInfo> getAudioListFromLocal(String path){ SAXParserFactory sax=SAXParserFactory.newInstance(); PlaylistXMLHandler playlistHandler=new PlaylistXMLHandler(); try { SAXParser parser=sax.newSAXParser(); XMLReader reader=parser.getXMLReader(); reader.setContentHandler(playlistHandler); reader.parse(new InputSource(new FileInputStream(new File(path)))); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } static class PlaylistXMLHandler extends DefaultHandler { String tag; AudioInfo info; StringBuilder builder=new StringBuilder(); @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if(!(tag.equals(""))){ builder.append(ch,start,length); } super.characters(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); if(tag.equals("uuid")){ info.setUuid(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("artist")){ info.setArtist(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("id")){ info.setId(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("size")){ info.setSize(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("bookmark")){ info.setBookMark(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } // else if(tag.equals("year")){ info.setYear(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("albumId")){ info.setAlbumId(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("artistId")){ info.setArtistId(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("dateAdded")){ info.setDateAdded(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("dateModified")){ info.setDateModified(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("title")){ info.setTitle(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("lpDownOnce")){ info.setLpDownOnce((builder.toString().replaceAll("\n", "").replaceAll("\\s", "").equals("true")?true:false)); builder.setLength(0); } else if(tag.equals("isplaying")){ info.setPlaying((builder.toString().replaceAll("\n", "").replaceAll("\\s", "").equals("true")?true:false)); builder.setLength(0); } else if(tag.equals("isselected")){ info.setSelected((builder.toString().replaceAll("\n", "").replaceAll("\\s", "").equals("true")?true:false)); builder.setLength(0); } else if(tag.equals("artist")){ info.setArtist(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("songname")){ info.setTitle(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("album")){ info.setAlbum(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("duration")){ info.setDuration(Integer.parseInt(builder.toString().replaceAll("\n", "").replaceAll("\\s", ""))); builder.setLength(0); } else if(tag.equals("type")){ info.setType(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("data")){ info.setData(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); //System.out.println("url--->"+builder); builder.setLength(0); } else if(tag.equals("smallpicurl")){ info.setSmallpicurl(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); //System.out.println("smallpicurl--->"+builder); builder.setLength(0); } else if(tag.equals("bigpicurl")){ info.setBigpicurl(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); //System.out.println("bigpicurl--->"+builder); builder.setLength(0); } else if(tag.equals("lrcData")){ info.setLrcData(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("picData")){ info.setPicData(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("description")){ info.setDescription(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } else if(tag.equals("displayname")){ info.setDisplayName(builder.toString().replaceAll("\n", "").replaceAll("\\s", "")); builder.setLength(0); } tag=""; if(localName.equals("AudioInfo")){ list.add(info); } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); tag=localName; if(tag.equals("playlist")){ if(list==null) list=new ArrayList<AudioInfo>(); else{ list.clear(); } }else if(tag.equals("AudioInfo")){ info=new AudioInfo(); } } } }
发表评论
-
Android OpenGL库函数列表
2014-11-26 10:44 1267Android OpenGL库函数列表 OpenGl核 ... -
FFmpeg Android部分的编译
2014-06-19 17:09 1247编译的是最新版2.2.3。再说编译环境 操作系统 ubun ... -
AVPacket与AVFrame的关系
2014-06-19 16:19 10078最近在做ffmpeg相关的项目,满眼的AVPacket和AV ... -
WebView 自适应全屏
2013-10-30 11:29 5296网上有通行的3中方法 写道 第一种: settings ... -
NDK调试
2013-10-24 16:41 5887大体根据官方攻略 http://tools.android ... -
adb logcat 打印输出
2013-08-06 11:43 3159深圳公司的同事在测试的时候遇到一些bug 我这边没办法重 ... -
android上加载大图片需要注意的问题
2013-07-16 21:47 9444尽量不要使用setImageBitmap或setImageR ... -
XMPP下的注册与登录
2013-06-24 23:43 6760前面讲了本地如何搭建XMPP环境 其实我不懂 也没认真的好好 ... -
XMPP 环境快速搭建
2013-06-24 22:31 1256这年头微信火 于是好多公司都要跟风 搭建环境其实挺简单 ... -
利用Movie播放GIF
2013-05-09 16:52 5162public class ViewContent ex ... -
ListView分隔线的显示
2013-04-08 16:21 1588项目中需要在listview中添加footview 出现了 ... -
结合popwindow与gridview的一例
2013-03-15 16:04 1419项目中需要实现一个gridview 点击某项弹出一个popu ... -
[转]Android中Matrix的pre post set方法理解
2013-03-08 15:03 1285虽说以前学习过线性代数和图形学原理,但是在实际中碰到matr ... -
50个Android开发人员必备UI效果源码[转载]
2013-03-08 09:29 44679Android 仿微信之主页面实现篇Android 仿微信之界 ... -
对View DrawingCache的理解
2013-02-18 19:37 1182View组件显示的内容可以通过cache机制保存为bitm ... -
Fragment使用方法一则
2013-02-18 17:28 1591之前在项目里也用到了fragment,作为横向滑动的组件显示 ... -
AVD ROOT
2012-12-04 11:47 3253启动一个模拟器,开 ... -
onTouchEvent 、onInterceptTouchEvent的顺序~
2012-10-26 10:29 1236转自:http://yxwww.iteye.com/blog/ ... -
ListView滑动获取分页 并异步加载每一项的图片
2012-09-26 10:40 4527项目有一个需求就是从服务器获取一个分页数据,数据按json数组 ... -
解析apk文件的图标等内容
2012-09-05 15:56 3344import java.lang.reflect. ...
相关推荐
2. **内存消耗小**:与DOM解析器(将整个XML结构转化为内存中的树形结构)相比,SAX解析器对内存的需求较少。 3. **实时性**:因为是事件驱动,解析过程可以与数据处理同时进行,提高了程序的响应速度。 **SAX解析...
XML(eXtensible Markup Language)是一种...通过实现`ContentHandler`接口,开发者可以自定义XML数据的处理逻辑,实现对XML数据的逐个节点读取和处理。同时,结合JSON库,SAX也能帮助完成JSON到XML的数据转换任务。
本文将深入探讨如何使用SAX(Simple API for XML)解析器来读取XML文件,这是一种基于事件驱动的解析方式,非常适合处理大型或内存受限的环境。 SAX解析器不同于DOM(Document Object Model)解析器,DOM会将整个...
本篇将重点讲解如何使用SAX(Simple API for XML)解析XML文件,这是一种事件驱动的解析方式,非常适合处理大体积的XML文件,因为它不会一次性加载整个文件到内存中,从而节省了资源。 首先,了解SAX解析的基本原理...
在Android Studio的build.gradle文件中,确保已经包含了对`org.xml.sax`的支持,这通常作为Android SDK的一部分默认提供,无需额外添加库。 接下来,我们创建一个SAX事件处理器。这个处理器实现了`org.xml.sax....
3. **创建自定义Handler**:定义一个类继承自`org.xml.sax.helpers.DefaultHandler`,并重写其中的方法以实现对XML文件的解析。 ```java class PersonParser extends DefaultHandler { // 重写方法... } ``` 4...
SAX(Simple API for XML)是一种轻量级的XML解析技术,主要用于读取XML文档。相较于DOM解析,SAX解析不将整个XML文档加载到内存中,而是采用事件...不过,这需要对XML的结构有清晰的理解,并准备处理各种解析事件。
程序员可以自定义这些处理器方法来处理事件,从而实现对XML文件的解析。 以下是一个简单的SAX解析超大XML文件的Java示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import ...
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,它在Web服务、配置文件、数据传输等领域广泛应用。...通过自定义处理器,你可以灵活地实现对XML数据的定制化处理,满足各种业务需求。
这些处理器方法由应用程序实现,从而对XML文档进行处理。下面将详细介绍SAX解析XML的基本步骤、主要接口及其实现方法。 1. **基本步骤:** - 创建`SAXParserFactory`实例,用于生成`SAXParser`。 - 使用`...
使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...
如果需要频繁地对XML进行随机访问和修改,DOM可能是更好的选择;如果关注性能和内存效率,或者处理的XML文件非常大,SAX则更合适。 通过`DomDemo.java`和`SaxDemo.java`,你可以深入理解这两种解析方式的差异和使用...
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...
在Java中,使用SAX生成XML文件并不常见,因为SAX通常用于解析,而不是创建。然而,通过自定义`ContentHandler`,我们可以控制XML元素的生成过程。`ContentHandler`是一个接口,包含如`startElement`、`endElement`...
在提供的压缩包文件中,可能包含了一个名为`MenuDemo1`的示例,展示了如何在Android应用中创建XML菜单,以及一个名为`SAXMake`的示例,演示了使用SAX生成XML文件的具体实现。通过研究这些示例,开发者可以更好地理解...
结合上述信息,我们可以创建一个示例程序,使用SAX解析XML文件,并对从中提取的id进行冒泡排序: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers....
要使用SAX解析XML文件,我们需要遵循以下步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器。Android提供了一个内置的`DefaultHandler`类,我们可以继承它并重写其中的方法来处理解析过程中遇到的事件。 ...
在Qt框架中,处理XML文件是常见的需求,本项目提供了一个使用DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式的示例,帮助开发者理解如何在Qt环境下进行XML文件的读写操作。 首先,DOM是一种...
- 虽然SAX解析效率高,但对XML结构的修改和查询较为不便,适用于只需要读取数据的场景。 通过以上内容,你应该对Android中使用SAX解析XML有了深入的理解。实践过程中,可以结合具体XML文件结构和业务需求,灵活运用...