Read file content into Arraylist using ObjectInputStream

146 Views Asked by At

I am a beginner in java and practicing IO stream and Serialization .In below problem unable to read all data into a Arraylist and print it. by using the ObjectOutputStream insert the content by user in file but unable to get all data. just first part of data are read.

package com.filehandling;
import java.io.*;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name ;
    private int age;
    private String role;
    private int number;
    User(){}
    public User(String name1, int age1, String role1, int number1){
         this.name = name1;
         this.age = age1;
         this.role = role1;
         this.number = number1;
    }
    public String getName() {
        return this.name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    public String getRole() {
        return this.role;
    }
 
    public void setRole(String role) {
        this.role = role;
    }
 
    public int getAge() {
        return this.age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
    
    public int getNumber() {
        return this.number;
    }
    
    public void setNumber(int number) {
        this.number = number;
    }

 
 
   @Override
    public String toString() {
    
        return new StringBuffer(" Name : ").append(this.name)
                .append(", role : ").append(this.role).append(", Age : ").append(this.age).append(" Number : ").append(this.number).toString();
    }
 
}

package com.filehandling;
import java.io.*;
import java.util.*;

public class Menu {
    String name, role;
    int age,number;
    //User user1 = new User();
    File f = new File("students.txt");
public static void main(String[] args) throws IOException {

    Menu main = new Menu();
    Scanner scan = new Scanner(System.in);
    
    while(true) {
        System.out.println("Enter 1 for Add data");
        System.out.println("Enter 2 for Printing all data");
        System.out.println("Enter 3 to Exit");
        scan.hasNextLine();
        int choice = scan.nextInt();
        scan.hasNextLine();
        
        //String extra = scan.nextLine();
        switch(choice)
        {
            case 1:
                main.callWriteFile();
                
                break;
            case 2:
                main.callReadFile();
                break;
            case 3:
                System.exit(1);
                break;
            default:
                System.out.println("\nInvalid Choice !");
                break;
        }
    }
}

    public void callWriteFile() {
    try {
        Scanner scan = new Scanner(System.in);
    
            Menu main = new Menu();
            System.out.println("enter name, role, age, number");
            
            
             name = scan.nextLine();
             role = scan.nextLine();
             age = scan.nextInt();
             number = scan.nextInt();
             
            User user = new User(name,age,role,number);
            main.writeData(user);
            
            
    }
    catch(Exception e) {}
    }

    public void callReadFile() throws IOException {
        Menu main = new Menu();
        ArrayList<Object> objectsList = new ArrayList<>();
        main.readFile(objectsList);
        
    for(Object user1: objectsList) {
            System.out.println(user1);  
        }

        
        System.out.println(objectsList);
        }
        



     public ArrayList<Object> readFile(ArrayList<Object> list) throws IOException{
         
         FileInputStream file = new FileInputStream("students.txt");
        ObjectInputStream input = new ObjectInputStream(file);
//       ArrayList<Object> objectsList = new ArrayList<>();
         boolean counter = true;
         while (counter) {
           try  {
             Object object = input.readObject();
             if (object != null) {
             User userTest = (User) object;
                if( userTest !=null){
                    System.out.println(" my  "+userTest);
                }
               list.add(object);
             }
             input.close();
             
               counter = false;
             }
            
           catch(Exception e) {
                System.out.println(e);
                e.printStackTrace();
                return null;
           }
            }
        // input.close();
         return list;
         
     }
    
    public void writeData(Object obj) {
        try{
            FileOutputStream file = new FileOutputStream("students.txt", true);
            if (f.length() == 0) {
            ObjectOutputStream object = new ObjectOutputStream(file);
    
    
            object.writeObject(obj);
            object.close();
            
            }
            else {
                 MyObjectOutputStream oos = null;
                 oos = new MyObjectOutputStream(file);
                 oos.writeObject(obj);

                 // Closing the FileOutputStream object
                 // to release memory resources
                 oos.close();
            }
            }
        catch(Exception e) {    
            System.out.println(e);

            }
    }
}       
package com.filehandling;

import java.io.*;
import java.util.*;

public class MyObjectOutputStream extends ObjectOutputStream {
 
    // Constructor of this class
    // 1. Default
    MyObjectOutputStream() throws IOException
    {
 
        // Super keyword refers to parent class instance
        super();
    }
 
    // Constructor of this class
    // 1. Parameterized constructor
    MyObjectOutputStream(OutputStream o) throws IOException
    {
        super(o);
    }
 
    // Method of this class
    public void writeStreamHeader() throws IOException
    {
        return;
    }
}

i tried every possible thing at my level but cannot spot the loophole.

0

There are 0 best solutions below