如果有人能帮助我解决这个问题,我将非常感激。当我运行此类 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/