在java中无法同时从文件中读取对象和数据
在java中无法同时从文件中读取对象和数据 我可以将对象写入文件,但无法获取所有对象,只能获取第一个对象,并且无法检索对象后的数据在java中无法同时从文件中读取对象和数据,java,file,Java,File,在java中无法同时从文件中读取对象和数据 我可以将对象写入文件,但无法获取所有对象,只能获取第一个对象,并且无法检索对象后的数据 import java.io.*; import java.util.*; class writeobj implements Serializable { public String name; public long size; } class FileLists { public static void main(Strin
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:无效类型代码:69 at
java.base/java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2937)
在
java.base/java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2971)
在
java.base/java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:3043)
在
java.base/java.io.ObjectInputStream.read(ObjectInputStream.java:906)
位于FileLists.main(createnewfile.java:33)
问题可能在于:
while((ch=ois.read())!= -1){
System.out.println("as");
}
您正在编写'writeobj'类,后跟文件字节,然后重复。
因此,希望您保存的文件如下所示:
- writeobj-使用ObjectOutputStream编写
- 文件字节-直接写入FileOutputStream
- writeobj-使用ObjectOutputStream编写
- 文件字节-直接写入FileOutputStream
- 从ObjectInputStream读取writeobj
- 直接从FileInputStream读取文件字节的确切数目
- 从ObjectInputStream读取下一个writeobj
- 等等