[英]Not able to read object and data from the file at same time in java
无法在Java中同时从文件中读取对象和数据,无法将对象写入文件,但无法获取所有对象,仅获取第一个对象,并且无法获取对象之后的数据
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中读取非对象的数据。
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:无效类型代码:java.base / java.io.ObjectInputStream $ BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2937)处的java.base / java.io.ObjectInputStream $ BlockDataInputStream.refill(ObjectInputStream.java) FileLists.main(createnewfile)上的java.base / java.io.ObjectInputStream.read(ObjectInputStream.java:906)处的java.base / java.io.ObjectInputStream $ BlockDataInputStream.read(ObjectInputStream.java:3043)处的:2971)。的java:33)
问题可能出在这里:
while((ch=ois.read())!= -1){
System.out.println("as");
}
您正在编写'writeobj'类,后跟文件字节,然后重复。 因此,希望您保存的文件如下所示:
但是,在读取时,您读取了一个writeobj对象,然后尝试从ObjectInputStream中读取另一个对象。
为此,您必须:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.