Java 将类保存到文件?

Java 将类保存到文件?,java,android,serialization,Java,Android,Serialization,我正在写一个程序,这是一个音乐播放器和歌词搜索。到目前为止,程序每次加载时都必须读取每个音乐文件并检索ID3标记以查找艺术家姓名、歌曲名称等。当读取多个文件时,提取ID3标记的过程非常耗时。我希望能够将ID3信息保存到程序的私有数据目录中,而不是每次运行程序时都读取每个ID3标记 我对序列化和保存/加载这样的东西感到困惑。我猜我应该使用FileOutput/InputStreams或ObjectOutput/InputStreams来实现这一点,但我无法掌握它们。有人能帮助我,告诉我如何正确保存

我正在写一个程序,这是一个音乐播放器和歌词搜索。到目前为止,程序每次加载时都必须读取每个音乐文件并检索ID3标记以查找艺术家姓名、歌曲名称等。当读取多个文件时,提取ID3标记的过程非常耗时。我希望能够将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;
}

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

尝试使用SQLLite数据库存储此信息,而不是滚动您自己的文件序列化。看看你能不能做到这一点

    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();
下面是有关序列化和反序列化位图的链接


创建sqlite数据库并将这些字段存储为列。这将允许快速访问以及排序/搜索功能。位图会那样序列化吗?它没有实现可序列化。@顿托斯卡塔——你说得对。我没有注意到位图对象。这是我最初尝试的方式。我还是很困惑。我有两个问题。。。1.按照您的方式,文件必须存在。如果文件不存在,如何创建该文件?我想您应该尝试创建ObjectInputStream并捕获一个异常。如果捕获到异常,则生成该文件(但我不知道如何生成此空文件)。2.这将如何更改ObjectInput/OutputStream函数?我不知道何时何地调用writeObject和readObject。该文件不必存在。如果没有,FileOutputStream将创建该文件。如果它已经存在,它将覆盖它。您的readObject和writeObject方法将是Serializable类(在本例中为Song)的一部分,因此我仍然可以在.readObject()中调用ArrayList myArrayList=(ArrayList);和上面完全一样,它会在歌曲中隐式调用我的readObject方法(writeObject也是如此)?这是我感到困惑的部分。
private void writeObject(java.io.ObjectOutputStream out)
private void readObject(java.io.ObjectInputStream in)