【问题标题】:Saving an array of objects to a text file将对象数组保存到文本文件
【发布时间】:2015-03-15 13:42:00
【问题描述】:

我正在尝试将数组对象(房间)保存到 .txt 文件中。我对序列化不是很熟悉,但我已经尽可能地尝试使用它来将对象写入文件。但是,我每次都会收到此错误代码:

java.io.NotSerializableException: hotelobjects.Room
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at hotelobjects.HotelObjects.storeData(HotelObjects.java:81)
at hotelobjects.HotelObjects.main(HotelObjects.java:50) 

这是主要代码:

public class HotelObjects {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws Exception {
    String command;

    Scanner input = new Scanner(System.in);

    Room[] myHotel = new Room[10];
    for (int x = 0; x < myHotel.length; x++) {
    myHotel[x] = new Room();
    }

    String roomName;
    int roomNum = 0;

    while (roomNum < 11) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter command : ");
        command = input.next();
        command = command.toLowerCase();

        if (command.charAt(0) == 'v') {
            viewCustomers(myHotel);
        }

        if (command.charAt(0) == 'a') {
            addCustomers(myHotel);
        }

        if (command.charAt(0) == 'e') {
            emptyRooms(myHotel);
        }

        if (command.charAt(0) == 's') {
            storeData(myHotel);
        }
    }
}

private static void viewCustomers(Room hotelRef []) {
    for (int x = 0; x < 10; x++) {
            System.out.println("room " + x + " occupied by " + hotelRef[x].getName());
        }
}

private static void addCustomers(Room myHotel[]) {
    String roomName;
    int roomNum;
    System.out.println("Enter room number (0-10) or 11 to stop:");
    Scanner input = new Scanner(System.in);
        roomNum = input.nextInt();
        System.out.println("Enter name for room " + roomNum + " :");
        roomName = input.next();
        myHotel[roomNum].setName(roomName);
}

private static void emptyRooms(Room[] myHotel) {
    for (int x = 0; x < 10; x++ )
        if (myHotel[x].getName().equals("e"))System.out.println("room " + x + " is empty");
}

private static void storeData(Room [] myHotel) {
     try{
     FileOutputStream fos= new FileOutputStream("C:\\Users\\Ganz\\Documents\\NetBeansProjects\\HotelObjects\\HotelObject.txt");
     ObjectOutputStream oos= new ObjectOutputStream(fos);
     oos.writeObject(myHotel);
     oos.close();
     fos.close();
   }catch(IOException ioe){
        ioe.printStackTrace();
    }
}

}

【问题讨论】:

标签: java arrays object


【解决方案1】:

答案已经在异常消息中。我错过了hotelobjects.Room 的代码,但我敢打赌它没有实现Serializable。解决方案是简单地让 Room 实现 Serializable。

【讨论】:

    【解决方案2】:

    听起来你还没有实现Serializable 接口 您的 Room 类应如下所示:

    public class Room implements Serializable{
        public Room(){
            //...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多