当前位置: 首页 > 知识库问答 >
问题:

反序列化文件,然后将内容存储在ArrayList中。(java)

阳凌
2023-03-14

假设序列化。bin是一个充满单词的文件,在序列化时是ArrayList

public static ArrayList<String> deserialise(){
    ArrayList<String> words= new ArrayList<String>();
    File serial = new File("serialise.bin");
    try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))){ 
        System.out.println(in.readObject());   //prints out the content
    //I want to store the content in to an ArrayList<String>
    }catch(Exception e){
        e.getMessage();
    }
return words;
}

我希望能够反序列化“serialise.bin”文件并将内容存储在ArrayList中

共有1个答案

蓬弘
2023-03-14

将其强制转换为ArrayList

@SuppressWarnings("unchecked")
public static ArrayList<String> deserialise() {

    // Do not create a new ArrayList, you get
    // it from "readObject()", otherwise you just
    // overwrite it.
    ArrayList<String> words = null;
    File serial = new File("serialise.bin");

    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))) { 
        // Cast from "Object" to "ArrayList<String>", mandatory
        words = (ArrayList<String>) in.readObject();
    } catch(Exception e) {
        e.printStackTrace();
    }

    return words;
}

可以添加注释SuppressWarnings(“unchecked”)以抑制类型安全警告。这是因为您必须将对象强制转换为泛型类型。对于Java的类型擦除,编译器无法知道转换在运行时是否是类型安全的。这是另一篇关于这个的帖子。此外,e.getMessage() 什么都不做,打印它或使用printStackTrace() ”。

 类似资料:
  • 我必须写一个程序: 提示用户输入输入文件的名称, 从输入文件中读取数据,并将有关汽车的信息存储在汽车对象数组列表中, 将数组列表中未排序的数据打印到屏幕上,如下所示: 我想不出前三步该怎么做。 我也有两个类,与这个项目,并将添加他们,如果需要/需要。因此,基本上只需要帮助了解如何从用户那里读取文本文件,将文本文件的内容添加到ArrayList中,并以格式化的方式打印出ArrayList的内容(我的

  • 我想存储以下格式的文本文件的内容: 第一行包含两个整数,比如n和k,用空白分隔。 下面的行包含n个整数(n可以很大)(我希望将其存储在ArrayList中) 通过在网上搜索Java的文件处理方式,我了解到了BufferedReader是处理大输入的首选方式,因为它更快(与扫描器相比),也了解了如何处理。我的尝试如下: 因为我知道第一行只包含2个数字,所以我读取该行,将其转换为大小为2的字符串数组,

  • 我使用Spring Boot与Rabbitmq与JSON消息序列化。使用直接回复功能的回复不能反序列化容器中的类。 在,说明

  • 问题内容: 我的hangman程序有问题。我真的认为我需要做的事超出了我对Java的了解。这是我的代码 我能够使程序读取文件,然后打印到屏幕上,但是我不知道如何将文件中的单词存储到数组中。我一点都没有进步,所以请尝试并做到透彻。 问题答案: 您需要将读取的行保存在一个对象中,并将其分配给数组的某个字段。例如: 这会将值赋给数组的第一个字段。

  • 下面的代码当然不是做我需要做的事情的最佳方式,但不幸的是,我没有太多时间回去改变数据结构/存储选项等。然而,它将被清理干净。不管怎样,代码的质量不是我的问题,我跑题了。 当用户第一次注册他们的帐户时,他们会得到一个带有多项选择(复选框)的ListView。所选项目存储在SparseBooleanArray中,然后转换为ArrayList of Strings。 ListView项的名称来自名为ge

  • 问题内容: 我试图序列化和反序列化内部对象的数组列表: HairList对象也是一个可序列化的对象。 此代码执行返回以下错误: 排队 我不知道我在做什么错。你能给个小费吗? 更新: 解决: 仅使用HairBirt的本机数组而不是ArrayList即可工作: 代替 感谢大家的帮助。 问题答案: 不要使用-而是使用二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。 我强烈怀疑这是