将类保存到文件?

时间:2011-07-27 20:08:43

标签: java android serialization

我正在编写一个音乐播放器和歌词查找程序。截至目前,每次它具有读取每个音乐文件检索ID3标签的程序加载找到歌手名,歌曲名等,当读取超过两文件的更多,过程中提取ID3标签是非常时期-consuming。我希望能够将ID3信息保存到程序的私有数据目录中,而不是每次运行程序时都读取每个ID3标记。

我对序列化和保存/加载这样的东西很困惑。我猜我应该使用FileOutput / InputStreams或ObjectOutput / InputStreams来实现这一点,但我无法掌握它们。有人可以帮助我,并告诉我如何正确保存和加载我的“歌曲”课程?以下是我需要保存的变量。

public class Song implements Serializable
{
    private int index = 0, trackLength = 0;
    private Bitmap albumArtwork = null;
    private String toString, name, trackNumber, artist, album, lyrics, fileName, releaseDate;
}

如您所见,我需要跟踪一些字符串,两个整数和一个位图。可有人告诉我如何将一个阵列的ArrayList这些保存到文件中的设置,比如,名为“music_info.sav”或类似的规定?另外,如何检查此文件是否存在(如果不存在,则将文件创建为空)?

2 个答案:

答案 0 :(得分:4)

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("song.ser"));
    out.writeObject(yourArrayList);
    out.flush();
    out.close();

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("song.ser"));
    ArrayList<Song> myArrayList = (ArrayList<Song>) in.readObject();
    in.close();

阅读。

修改

我不确定Bitmap对象。您可能必须滚动自己的readObject()和writeObject()方法。

private void writeObject(java.io.ObjectOutputStream out)
private void readObject(java.io.ObjectInputStream in)

以下是有关序列化和反序列化位图的链接。

http://www.johnwordsworth.com/2011/06/serializing-and-de-serializing-android-graphics-bitmap/

答案 1 :(得分:2)

尝试使用SQLite数据库存储此信息,而不是滚动自己的文件序列化。请参阅http://developer.android.com/guide/topics/data/data-storage.html,看看能否实现这一目标。