从文件中读取和写入Java中的Obj。文件结束异常
我试图在一个文件上写一个对象,然后从同一个文件中读取它 我从一个简单的文本文件填充了一个对象的arraylist。 当我试图在文件上写入时,我有一个EOFEException从文件中读取和写入Java中的Obj。文件结束异常,java,serialization,objectinputstream,objectoutputstream,Java,Serialization,Objectinputstream,Objectoutputstream,我试图在一个文件上写一个对象,然后从同一个文件中读取它 我从一个简单的文本文件填充了一个对象的arraylist。 当我试图在文件上写入时,我有一个EOFEException public class CaricaTestoScriviOggetti_Copia { public static void main(String[] args) { File fileIn = new File("src/Lista.txt"); Scanner input
public class CaricaTestoScriviOggetti_Copia {
public static void main(String[] args) {
File fileIn = new File("src/Lista.txt");
Scanner input = null;
try {
input = new Scanner(fileIn);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<Persona> persone = new ArrayList<Persona>();
ArrayList<Persona> maggiorenni = new ArrayList<Persona>();
String nome = null;
String cognome = null;
int eta = 0;
while (input.hasNext()) {
nome = input.next();
cognome = input.next();
eta = input.nextInt();
if (input.hasNext("\n"))
input.nextLine();
persone.add(new Persona(nome, cognome, eta));
}
for (Persona p : persone) {
System.out.println(p);
if (p.getEta() > 17)
maggiorenni.add(p);
}
input.close();
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("src/ListaObj.dat");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
oos = new ObjectOutputStream(fos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Persona p : maggiorenni) {
try {
oos.writeObject(p);
oos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// END FOR
try {
fos.close();
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileOutputStream fos2 = null;
ObjectOutputStream oos2 = null;
try {
fos2 = new FileOutputStream("src/Oggetto.dat");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
oos2 = new ObjectOutputStream(fos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
oos2.writeObject(maggiorenni.get(1));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos2.close();
oos2.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("src/Oggetto.dat");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ois = new ObjectInputStream(fis);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Persona catched = null;
try {
catched = (Persona) ois.readObject();
} catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// END FOR
try {
fis.close();
ois.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("<------------Oggetto Letto------------>");
System.out.println(catched);
// END MAIN
}
// END CLASS
}
public class CaricaTestoScriviOggetti_Copia{
公共静态void main(字符串[]args){
File fileIn=新文件(“src/Lista.txt”);
扫描仪输入=空;
试一试{
输入=新扫描仪(文件输入);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
ArrayList persone=新的ArrayList();
ArrayList maggiorenni=新的ArrayList();
字符串nome=null;
字符串cognome=null;
int eta=0;
while(input.hasNext()){
nome=input.next();
cognome=input.next();
eta=输入.nextInt();
if(input.hasNext(“\n”))
input.nextLine();
添加(新人物角色(nome、cognome、eta));
}
对于(角色p:个人){
系统输出println(p);
如果(p.getEta()>17)
加上(p);
}
input.close();
FileOutputStream=null;
ObjectOutputStream oos=null;
试一试{
fos=新文件输出流(“src/ListaObj.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos=新对象输出流(fos);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
对于(角色p:maggiorenni){
试一试{
oos.writeObject(p);
oos.flush();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
//结束
试一试{
fos.close();
oos.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
FileOutputStream fos2=null;
ObjectOutputStream oos2=null;
试一试{
fos2=newfileoutputstream(“src/Oggetto.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos2=新对象输出流(fos);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos2.writeObject(maggioreni.get(1));
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
fos2.close();
oos2.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
FileInputStream fis=null;
ObjectInputStream ois=null;
试一试{
fis=新文件输入流(“src/Oggetto.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
ois=新的ObjectInputStream(fis);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
人物角色捕获=空;
试一试{
catched=(Persona)ois.readObject();
}捕获(ClassNotFoundException | IOException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//结束
试一试{
fis.close();
ois.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
System.out.println(“”);
系统输出打印项次(捕获);
//端干管
}
//末级
}
您的读取循环无效readObject()
在流的末尾不返回null,所以在循环终止条件下测试它是没有意义的
for (;;) {
try {
p = (Persona) ois.readObject();
k++;
persone.add(p);
} catch (EOFException exc) {
break;
}
}
“当我试图在文件上写入时,我有一个EOFEException。”不,你没有。当您尝试从文件中读取时,会出现
EOFEException
,原因是文件中没有任何内容。注意:不要这样写代码。取决于先前try
块中代码成功与否的代码必须位于该try
块内。很抱歉,我发布了错误的代码部分。你认为我必须删除这篇文章并用正确的代码部分写一篇吗?这是给我这个错误的代码你应该编辑你的问题。删除错误的代码并输入正确的代码。
for (;;) {
try {
p = (Persona) ois.readObject();
k++;
persone.add(p);
} catch (EOFException exc) {
break;
}
}