首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在java中同时从文件中读取对象和数据

无法在java中同时从文件中读取对象和数据
EN

Stack Overflow用户
提问于 2018-06-16 00:22:59
回答 1查看 99关注 0票数 2

在java中不能同时从文件中读取对象和数据。m能够将对象写入文件,但不能提取所有对象。只提取第一个对象,并且不能检索对象之后的数据。

代码语言:javascript
复制
 import java.io.*;
 import java.util.*;

 class writeobj implements Serializable
 {
   public String name;
   public long size;
 }

 class FileLists
 {
   public static void main(String[] args)  throws Exception
   {
   try{
    File folder = new File("/home/shubham/Desktop/packer/dem");

    File[] files = folder.listFiles();

    FileOutputStream fobj = new FileOutputStream("myfile.ser");

     ObjectOutputStream oobj = new ObjectOutputStream(fobj);
      int ch;

    for (File file : files) 
        {   
            if (file.isFile())
                {  
            writeobj obj = new writeobj();
                    obj.name = file.getName();
            obj.size = file.length();
            oobj.writeObject(obj);
            String str = file.getAbsolutePath();
            FileInputStream fre =new FileInputStream(str); 
            System.out.println(file.getName()+"-"+file.length()+"-"+str);


            //FileReader f = new FileReader(obj.name);
            byte[] buffer = new byte[1024];

            while((ch = fre.read(buffer))!=-1){
                //System.out.println((char)ch);
                fobj.write(buffer,0,ch);
            }
            //Fread = null;
            fre.close();
            obj = null;
        }
        }
}
catch(Exception e)
{
    System.out.println(e);
}       
}
}

从该文件中读取时,它只能读取第一个对象并创建该文件,但之后无法从myfile.ser中读取数据和对象

代码语言:javascript
复制
import java.io.*; 
import java.util.*;

  class writeobj implements Serializable
  {
    public String name;
    public long size;
   }
  class FileLists
  {
   public static void main(String[] args) 
{

int ch;
//File folder = new File("/home/shubham/Desktop/packer/dem/hello/demo");
try
{
    FileInputStream fobj = new FileInputStream("myfile.ser");
    //BufferedInputStream br = new BufferedInputStream(fobj);

    ObjectInputStream ois = new ObjectInputStream(fobj);
    writeobj e;
    while( (e = (writeobj)ois.readObject()) != null)
    {
        FileWriter f = new FileWriter(e.name);

        System.out.println(e.name+"name :"+e.size);

        while((ch=ois.read())!= -1){
            System.out.println("as");
        }
    }   

}
catch(Exception ef){
System.out.println();
    ef.printStackTrace();
}

}
}

堆栈跟踪:

java.io.StreamCorruptedException:无效的类型代码: 69 at java.base/java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2937) at java.base/java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2971) at java.base/java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:3043) at java.base/java.io.ObjectInputStream.read(ObjectInputStream.java:906) at FileLists.main(createnewfile.java:33)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 03:42:58

问题可能出在这里:

代码语言:javascript
复制
while((ch=ois.read())!= -1){
    System.out.println("as");
}

您正在编写“writeobj”类,后跟文件字节,然后重复。因此,希望您保存的文件将如下所示:

使用ObjectOutputStream

  • file字节写入-直接写入FileOutputStream

  • writeobj -使用ObjectOutputStream

  • file字节写入-直接写入FileOutputStream

但是,当您正在读取时,您读取了一个writeobj对象,然后尝试从ObjectInputStream读取另一个对象。

要使其正常工作,您必须:

直接从ObjectInputStream

  • Read读取准确的文件字节数后,从ObjectInputStream

  • etc...

中读取下一次

  • 写入对象j
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50879463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档