如何在java中读取多个对象的文本文件?

时间:2018-04-14 06:20:30

标签: java objectinputstream

如何读取文本文件中的多个对象。我正在尝试阅读文本文件。我总是只得到文件的第一个对象。如何从文本文件中获取所有对象...

List<Processedfile> processfiles = new ArrayList<Processedfile>();

        Processedfile processfile = new Processedfile(); 
        processfile.setFilename(filename);
        processfile.setCountrow(uploadedFileCount);
        processfile.setDate(dateformat);

        processfiles.add(processfile);

        writeReportTextFile(processfiles);

将已处理的文件对象写入文本文件...

写文件

public void writeReportTextFile(List<Processedfile> processfiles) {

        String processedfilereport = "D:\\PaymentGatewayFiles\\MSSConsolidate\\processedfilereport.txt";

        try {
            File file = new File(processedfilereport);
            FileOutputStream f = new FileOutputStream(file.getAbsoluteFile(), true);
            // System.out.println(file);
            ObjectOutputStream s = new ObjectOutputStream(f);
            // System.out.println("the write"+reportfile);
            s.writeObject(processfiles);

            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

阅读文件..

public List<Processedfile> processreportfileread() {

        List<Processedfile> a1 = new ArrayList();
        String processedfilereport = "D:\\PaymentGatewayFiles\\MSSConsolidate\\processedfilereport.txt";
    try {
        File file = new File(processedfilereport);

         FileInputStream r = new FileInputStream(file);
     ObjectInputStream sp = new ObjectInputStream(r);

         a1 = (List) sp.readObject();

         System.out.println("the list is" +a1);

         Iterator i = a1.iterator();
         while(i.hasNext()) {

             System.out.println("the iterator report is ===="+i.next());
         }

         }
        catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

        return a1;
    }

1 个答案:

答案 0 :(得分:0)

对象序列化协议/ API可以处理包含单个对象或一系列对象的流。但无法处理流 1 的串联...这是您的应用程序似乎通过打开输出文件来创建的&#34;追加&#34;模式)

解决方案是不要像那样写它们。这样:

  FileOutputStream f = new FileOutputStream(file.getAbsoluteFile(), true);

从根本上说是错误的。它导致多个对象流被连接。无法阅读。

正确的方法是:

  1. 将<{1}}个对象的所有汇编到一个列表中,并通过一次Processedfile调用编写列表...或
  2. 使用一系列writeObject次调用将writeObject个对象写入单个Processedfile
  3. 将对象写入多个输出文件,并将文件作为ZIP存档或类似文件发送。
  4. 1 - 要了解原因,您需要阅读对象序列化规范,特别是您需要了解序列化协议/格式。