java - 从文件中读取 TreeMap(Java)?

标签 java dictionary serialization io treemap

对于学校作业,我必须创建一个程序,为用户提供将联系人保存到文件并使用 TreeMap 列出文件中的所有联系人的选项。我编写了代码将 map 中的联系人保存到文件中并从中读取它们,但是在尝试编译时出现错误,内容为:“不兼容的类型:对象无法转换为 ContactInfo”语句 ContactInfo ci = contact.getValue(); 我该如何解决这个问题?

向 map 添加联系人,然后将 map 写入文件的相关代码:

ContactInfo c = new ContactInfo();

System.out.print( "First name: " );
String fName = s.next();
System.out.print( "Last name: " );
String lName = s.next();
c.setName( fName, lName );

System.out.print( "Phone #: " );
String p = s.next();
c.setPhone( p );

System.out.print( "Email address: " );
String e = s.next();
c.setEmail( e );

contacts.put( lName, c );

try
{
    ObjectOutputStream out = new ObjectOutputStream(
                            new BufferedOutputStream(
                            new FileOutputStream( fileName ) ) );

    out.writeObject( contacts );
}

catch( Exception ex )
{
    System.out.println( "Error saving contact to file." );
}

列出所有联系人的相关代码:

try
{
    ObjectInputStream in = new ObjectInputStream(
                            new BufferedInputStream(
                            new FileInputStream( fileName ) ) );

    contacts = (TreeMap< String, ContactInfo >) in.readObject();

    in.close();                 
}

catch( Exception exc )
{
    System.out.println( "Error displaying contacts." );
}

for( Map.Entry contact : contacts.entrySet() )
{
    ContactInfo ci = contact.getValue();
    System.out.println( ci.getName() + "\t" + ci.getPhone() + "\t" + ci.getEmail() );
}

最佳答案

发生错误的原因是您没有在Map.Entry中指定对象的类型。如果未声明对象的类型,则您将处理键和值的 Object

我建议在 for 循环中的 Map.Entry 中包含对象类型,而不是像建议的那样进行不安全的转换:

for(Map.Entry<String, ContactInfo> contact : contacts.entrySet()) {

  String key = contact.getKey(); 
  ContactInfo value = contact.getValue();

}

关于java - 从文件中读取 TreeMap(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666319/

相关文章:

python - 为什么对 tensorflow 张量进行 pickle 会失败?

json - gzip json 与高效二进制序列化的性能

java - 使用带有覆盖比较的快速排序

java - 我怎样才能轻松地将 HTTPS(自签名证书)与 JSoup 一起使用?

java - 小Java程序中没有主类+嵌入为小程序

python - 将键复制到新字典 (Python)

swift - 如何发现字典数组中有重复数据

java - UDP聊天问题

javascript - 使用 Javascript 在 HTML 页面中查找关键字的快速算法

asp.net-mvc - 具有特定 JsonConverter 的 MVC3 Controller