Сохранение файла с ошибкой приведения

java.lang.ClassCastException: infrastructure cannot be cast to terrain
at p2_assign_version2.main(p2_assign_version2.java:98)

Это ошибка, которая постоянно печатается, когда я пытаюсь создать свой файл. Из-за этой ошибки я не могу напечатать все мои данные в моем terrain.txt

Кто-нибудь здесь знает, как я могу исправить ошибку?

и ниже - набор кода, который вызывает ошибку

File terrain=new File("terrain.txt");   //To create file
boolean tExist=terrain.exists();

terrain[]terrains = new terrain[100];


if(!tExist)
    {
        try
        {
            FileOutputStream fos = new FileOutputStream("terrain.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            terrains[0] = new terrain("Grass", true);
            oos.writeObject(terrains[0]);

            terrains[1] = new terrain("Water", false);
            oos.writeObject(terrains[1]);

            terrains[2] = new terrain("Pavement", false);
            oos.writeObject(terrains[2]);

            terrains[3] = new terrain("Road", false);
            oos.writeObject(terrains[4]);

            terrains[5] = new terrain("Drainage", false);
            oos.writeObject(terrains[5]);

            terrains[6] = new terrain("Hill", false);
            oos.writeObject(terrains[6]);

            terrains[7] = new terrain("Bushes", false);
            oos.writeObject(terrains[7]);

            terrains[8] = new terrain("Tree", false);
            oos.writeObject(terrains[8]);

            oos.flush();
            oos.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    else
    {
        try
        {
        FileInputStream fis=new FileInputStream("terrain.txt");
        ObjectInputStream ois=new ObjectInputStream(fis);

        for (p=0; p<terrains.length; p++)
        {
         if(terrains[p] == null)
          {
                      //this is the line that causes error to be printed//
              terrains[p] = (terrain) ois.readObject();
          }
        }

           ois.close();

      }

      catch(EOFException eof)
      {

      }
      catch(FileNotFoundException fnfe)
      {
       System.out.println("There seems to be a problem reading from the file");

      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
    }

1 ответ

Решение

Объект в ObjectInputStream является экземпляром infrastructure класс, а не экземпляр terrain учебный класс. Это будет работать:

(infrastructure) ois.readObject()

Невозможно помочь вам, не зная больше о коде, который создал ваш terrain.txt файл. Либо вам нужна документация, которая точно скажет вам, какие объекты были записаны в этот файл, либо вам нужно изучить код, который написал файл, чтобы вы могли точно знать, какие объекты были написаны.

Примечание: объекты Java не сериализуются как обычный текст, поэтому некорректно называть файл, содержащий сериализованные объекты Java, .txt расширение. Обычно .ser расширение используется для таких файлов.

Другие вопросы по тегам