Ошибка с java FileInputStream и FileOutputStream

Я только что сделал свой первый ввод-вывод на Java. Я хочу проверить, правильно ли сохранен контент, записанный в файл, или нет. Для чего я написал следующий код..

    import java.io.*;

    public class check implements Serializable {
        //Make two variables and methods to initialise them
        private int height;
        private int width;
        public void setWidth(int w){
            width = w;
        }
        public void setHeight(int h){
            height = h;
        }
        public static void main(String[] args) {

        check obj = new check();
        obj.setHeight(20);
        obj.setWidth(30);

    try{
        FileOutputStream fs = new FileOutputStream("foo.txt");
        ObjectOutputStream os = new ObjectOutputStream(fs);
        os.writeObject(obj);
        os.close();
    }
    catch(IOException ex){
    }
    //We set them to null so we can't access the objects on heap.
      obj = null;  

    //Now we read them back from file   
    try{
        ObjectInputStream is = new ObjectInputStream(new FileInputStream("foo.txt")); 
        check stored = (check) is.readObject();

    //Check to see if it worked.
     System.out.println("Variable, stored contains.." + stored.getType());
    }
    catch(IOException ex){
        }

    }
 }

Но выдает следующую ошибку.

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
    at check.Check.main(Check.java:33)

У кого-нибудь есть идея решить проблему?


person Juzz Coding    schedule 15.11.2013    source источник
comment
Не пытайтесь запускать код, пока у вас все еще есть ошибки компиляции. Откройте представление «Проблемы» в Eclipse и исправьте все перечисленные там ошибки компиляции, прежде чем пытаться запустить свой код. То, что вы делаете, похоже на попытку вести машину, у которой еще нет колес.   -  person JB Nizet    schedule 15.11.2013


Ответы (3)


Взгляните на http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readObject(). Метод перечисляет пару исключений. Для каждого перечисленного исключения, которое не является подклассом RuntimeException, вам нужно либо перехватить исключение, либо объявить, что метод может генерировать это исключение. Вы сделали это только для IOException. Вам также необходимо сделать это для других исключений, перечисленных в документации. Это необходимо сделать для всех методов, которые вызывают исключения, не относящиеся к среде выполнения.

person Viktor Seifert    schedule 15.11.2013
comment
Дело не в этом.. :( - person Juzz Coding; 16.11.2013
comment
@JuzzCoding Тогда я действительно не знаю, что можно сделать в этом случае. Я исходил из того, что говорится в вашем сообщении об ошибке. Я не могу обнаружить ничего, что вызывает это сообщение об ошибке. Возможно, вам нужно предоставить более подробную информацию здесь. - person Viktor Seifert; 18.11.2013
comment
nvm, сейчас проблема решена... на самом деле не удалось найти определение функции getType() - person Juzz Coding; 18.11.2013

Ваша IDE позволяет вам запускать некоторый код, даже если вам не хватает некоторых классов или несмотря на наличие ошибок компиляции. Исправьте ошибки компиляции перед их запуском.

person Sajal Dutta    schedule 15.11.2013
comment
Я не могу исправить ошибки компиляции. Любая помощь по этому поводу? - person Juzz Coding; 15.11.2013
comment
@JuzzCoding Перейти к окну --> Вывод --> Вывод. Вы должны увидеть ошибки и исправить их или нажать Ctrl + 4. - person Sajal Dutta; 15.11.2013
comment
Я могу перейти непосредственно к Window->Output (т. е. Ctrl+4 ), но это не меняет сообщение об ошибке, которое я опубликовал.. :\ - person Juzz Coding; 15.11.2013
comment
@JuzzCoding Открыв это окно, выполните «Выполнить» -> «Очистить и собрать проект». Вы увидите ошибки компиляции. Тот, который вы разместили, является ошибкой времени выполнения. - person Sajal Dutta; 15.11.2013

Ваш код не компилируется в данный момент. Строка 36 не работает.

System.out.println("Variable, stored contains.." + stored.getType());

Это потому, что проверка класса не содержит метод getType(). Может быть, Вы имели в виду что-то вроде getClass().getName()?

Исправьте эту ошибку и повторите попытку. Ваше собственное сообщение об ошибке не имеет для меня смысла - оно сгенерировано IDE?

PS. Ознакомьтесь с соглашениями о кодировании Java относительно именование классов, переменных и тому подобное. :)

person Tarmo R    schedule 15.11.2013