ObjectInputStream выдает IOException при вызове readObject()

Я пытаюсь скопировать файл с расширением .dat из определенного каталога, выбранного пользователем, в каталог проекта. Когда я пытаюсь прочитать сохраненный объект, выбранный пользователем, программа всегда выдает IOException.

File f = new File(chooser.getSelectedFile().getPath());
if (f.exists() && !f.isDirectory()) {
    FileInputStream flusso= null;
    ObjectInputStream leggiObj=null;
    try {
        flusso = new FileInputStream(chooser.getSelectedFile().getPath());
        System.out.println(chooser.getSelectedFile().getPath());
        leggiObj = new ObjectInputStream(flusso);
        if (leggiObj.readObject().getClass().equals(DatiProgresso.class)) {

            DatiProgresso dp = (DatiProgresso) leggiObj.readObject();//<----THIS LINE GIVES THE EXEPTION
            leggiObj.close();
            flusso.close();
            System.out.println("Ciao");
            FileOutputStream fop = new FileOutputStream("salvataggi/" + dp.getNome() + ".dat");
            ObjectOutputStream scriviObj = new ObjectOutputStream(fop);
            scriviObj.writeObject(dp);
            scriviObj.flush();
            fop.close();
        } else {
            JOptionPane.showMessageDialog(this, "Unacceptable file", "Error", JOptionPane.ERROR_MESSAGE);
        }
    } catch (HeadlessException ex) {
        System.out.println("HeadlessException");
        ex.printStackTrace();
    } catch (FileNotFoundException ex) {
        System.out.println("FileNotFoundException");
        ex.printStackTrace();
    } catch (IOException ex) {
        System.out.println("IOException");
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        System.out.println("ClassNotFoundException");
        ex.printStackTrace();
    }
}
}
else
{
JOptionPane.showMessageDialog(this, "Unacceptable file", "Error" ,JOptionPane.ERROR_MESSAGE);
}
DatiProgresso dp = (DatiProgresso) leggiObj.readObject();

Эта строка дает исключение.

Выбрасывает какиеIOException? Трассировки стека?

user207421 29.04.2019 05:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

leggiObj.readObject().getClass().equals(DatiProgresso.class) - здесь вы читаете свой объект из потока данных. В следующей строке вы пытаетесь прочитать второй объект из потока. Если другого объекта нет, то поток терпит неудачу.

@Freder Это означает, что это был EOFException, и вы должны были сказать об этом в своем вопросе.

user207421 29.04.2019 07:53

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