用SAX读写XML文件

今天的项目里做了一个缓存文件 利用的就是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();
}
}

}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值