我正在尝试读取文件并将所有对象添加到HashSet中,但是出现错误“无法将用户强制转换为java.util.HashSet”。我该如何解决?
private void readFromFile(String file){
Set<User> users = new HashSet<User>();
try(FileInputStream fileInputStream = new FileInputStream(file)){
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
users = (HashSet) objectInputStream.readObject();
System.out.println(users);
objectInputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
如何使用多个对象序列化到文件中? 例如(我正在使用Scanner并尝试输入名称和姓氏),当我这样做时,我的文件只有一个对象。
答案 0 :(得分:1)
您需要将objectInputStream.readObject()
返回的对象强制转换为User
,然后将其添加到HashSet
更改此
users = (HashSet) objectInputStream.readObject(); <--- can't cast User to HashSet
到以下
User user = (User) objectInputStream.readObject();
users.add(user);
答案 1 :(得分:1)
首先,正如@Nicholas K提到的,
因为您已将User
个对象写入流中,所以之后应读取User
个对象。
正如你所说
尝试时,我只有一个对象,但文件包含更多对象 多于三个用户
您得到一个对象是因为您仅读取了一个对象。
致电
User user = (User) objectInputStream.readObject();
仅读取一个用户(如果存在)。再次调用read()
,您将获得第二个对象(同样,如果存在)。
所以您要做的就是这个:
private void readFromFile(String file){
Set<User> users = new HashSet<User>();
try(FileInputStream fileInputStream = new FileInputStream(file)){
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
while (true) {
User user = (User) objectInputStream.readObject();
users.add(user);
}
} catch(EOFException e){
// This exception is raised because the whole file was read.
// So print the users in the set.
for (User user : users) {
System.out.println(user);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}finally{
// Never forget to close the stream after you're done
if (objectInputStream!=null) {
objectInputStream.close();
}
}