2

我刚刚用 Java 制作了我的第一个基于 I/O 的东西。我想检查写入文件的内容是否正确保存。为此我编写了以下代码..

    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)

任何人有任何想法来解决这个问题?

4

3 回答 3

1

看看http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readObject()。该方法列出了几个例外。对于列出的每个不是您的子类的异常,RuntimeException您需要捕获异常或声明该方法可以抛出该异常。您只为IOException. 您还需要对文档中列出的其他异常执行此操作。这需要对所有抛出非运行时异常的方法进行。

于 2013-11-15T14:20:13.177 回答
0

您的代码目前无法编译。第 36 行失败。

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

这是因为类检查不包含方法getType()。也许您的意思类似于getClass().getName()

修复此错误并重试。您自己的错误消息对我来说没有意义 - 它是由 IDE 生成的吗?

PS。查看有关类、变量等命名的Java 编码约定。:)

于 2013-11-15T07:49:58.470 回答
0

即使您缺少某些类或存在编译错误,您的 IDE 仍允许您运行一些代码。在运行它们之前修复编译错误。

于 2013-11-15T07:46:44.873 回答