【问题标题】:ObjectOutputStream human-readableObjectOutputStream 人类可读
【发布时间】:2015-11-16 02:25:35
【问题描述】:

我正在尝试读取 ArrayList 并将其写入文件,并且当前使用 ObjectOutputStream 写入文件。

fout = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fout);

oos.writeObject(arraylist);
fout.close();

arraylist 变量是对象的 ArrayList。此方法工作正常,但它以人类不可读的格式打印到文件中。

有没有办法实现相同的功能(相对容易),以便以人类可读的方式将对象写入文件?

【问题讨论】:

  • 基本上,ObjectOutputStream 是您尝试做的错误的类。有多种替代方案可能有效,具体取决于您尝试编写的这些对象的真正含义。但是(AFAIK)没有什么可以(充分)处理 any 对象。

标签: java file-io arraylist io


【解决方案1】:

您可以使用人类可读的 Json 表示。

例如使用杰克逊:

ObjectWriter ow = new ObjectMapper().writer();
ow.writeValue(fout, arraylist);

回读:

List<E> myObjects = new ObjectMapper().readValue(inputStream, 
                      new TypeReference<List<E>>(){});

【讨论】:

    【解决方案2】:

    由于您使用的是ObjectOutputStream,它会将该数据的二进制序列化版本写入文件,这是非人类可读的。但是您可以使用BufferedWriter 来执行相同的操作。

              //Sample code
    
         try{
                ArrayList<YourObject> yourObjectList;
               BufferedWriter writer = new BufferedWriter(new FileWriter("C:/yourPath/fileName.txt"));
                 for (YourObject oneObjAtATime : yourObjectList) {
                      writer.write(oneObjAtATime.toString());
                     }
           }catch(Exception e){
                throw new Exception("error");
                }
    

    【讨论】:

      【解决方案3】:

      我认为您需要做的是使用 PrintWriter,并且每次循环通过您的数组列表打印到新文件。试试:

      PrintWriter writer = new PrintWriter(outputFile);
      
      for (int i=0;i<<name>.length;i++){ 
      writer.println(<ArrayListName>[i].getString(), + "\t" + <ArrayListName>[i].getFirstInt() + "\t" + <name>.[i].getSecondInt +<etc...>); 
      }
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-27
        • 2011-09-14
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2017-07-09
        • 1970-01-01
        相关资源
        最近更新 更多