java - Last.fm java.lang.ClassCastException - 从文件中读取 User 对象

标签 java serializable objectinputstream last.fm

如果有人能帮助我解决这个问题,我将非常感激。当我运行此类 UniqueUsersData.java 时遇到错误

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.HashSet
    at gettingData.UniqueUsersData.main(UniqueUsersData.java:30)

UniqueUsersData.java:

package gettingData;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.io.Serializable;

import de.umass.lastfm.User;

public class UniqueUsersData {

public static void main(String[] args) throws IOException, ClassNotFoundException{

    HashSet<User> userData = null;
    String fileName = "users.csv";
    ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));

    try{
        while(in != null ){ // keep reading if there are more lines in the file
        userData = (HashSet<User>) in.readObject();
        }
    }catch(IOException e){
      e.printStackTrace();
    }

    String file = "usersInfo.csv";

    BufferedWriter out = new BufferedWriter(new FileWriter(file, true));

    for(User u: userData){
        System.out.println(u.getId() + "," +  u.getName() + "\n");
    }

    out.close();

} // end main method

} // end class

我有另一个类,它使用 last.fm api 获取数据,将 User 对象存储到数组列表中,然后将这些对象写入文件 (users.csv)。一切正常,我使用 ObjectOutputStream 写入文件。

我已经阅读过有关类需要可序列化的内容,但我假设 de.umass.lastfm.User 没有实现它。

我在这里缺少什么吗?

感谢您的帮助!

最佳答案

in.readObject() 返回一个字符串,并且您正在转换为 HashMap。这就是为什么你会得到ClassCastException。您可能需要以字符串格式(可能是逗号分隔值)写入用户详细信息(用户字段),然后您可以将它们作为字符串读取,用逗号分割并将它们逐行分配给用户对象。

关于java - Last.fm java.lang.ClassCastException - 从文件中读取 User 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358171/

相关文章:

Android包裹,存于内存还是磁盘?如何存入磁盘

Oracle:在可序列化事务中插入后立即选择

java - 通过 ObjectInputStream 和 transient 字段序列化

java - 从 SignedObject 获取时出现 InvalidObjectException

使用 Cassandra 进行 Java Spark 流处理

java - 如何在 unix shell 中运行命令,然后从 java 应用程序返回输出

Android ArrayList<Location> 在 Activity 之间传递

java - 将用户首选项保存/加载到文件

java - 计算Excel文件中的工作表数量

java - clientkeystore 访问被拒绝