可序列化的简单Object IOException

时间:2013-04-01 08:16:48

标签: java android ioexception serializable objectoutputstream

找到解决方案: 你必须像这样打开Streams:

FileInputStream  inputStream = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(inputStream);

与输出相同。这对我来说是固定的,如果有人偶然发现这个问题来寻找答案。

原始问题: 通过Toast s的一些测试,我发现当我调用ObjectOutputStream的构造函数时,我会抛出IOException

我的代码看起来像这样。请注意,这仅仅是一个测试项目,我甚至无法使用这个项目。

    Button b = new Button(this);
    b.setText("write");
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            try {
                File f = new File("Filepath");
                if (!f.exists()) {
                    f.createNewFile();
                }

                ObjectOutputStream oos = new ObjectOutputStream(
                        new FileOutputStream(f)); //IOException here!

                Series x = new Series("Test", 20, 12);
                // oos.writeObject(x);

                oos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    tv = new TextView(this);
    tv.setText("Not read anything yet!");

    Button r = new Button(this);
    r.setText("Read");
    r.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                ObjectInputStream ois = new ObjectInputStream(
                        new FileInputStream(new File("Filepath")));
                Series y = (Series) ois.readObject();
                tv.setText(y.getName() + "-" + y.getNumOfSeason() + "-"
                        + y.getNumOfEpisode());
                ois.close();
            } catch (StreamCorruptedException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

问题似乎是我的构造函数调用。在我用

添加部件之前
if (!f.exists()) {
                f.createNewFile();
            }

我得到了FileNotFoundException

我做错了什么?

4 个答案:

答案 0 :(得分:2)

以下是FileOutputStream

的Oracle文档摘录
  

如果文件存在但是是目录而不是常规文件,那么   不存在但无法创建,或无法打开任何其他   之所以抛出FileNotFoundException。

在您的情况下,我认为该文件被视为目录,因为它没有扩展名,因此抛出异常。

答案 1 :(得分:0)

当程序在磁盘中找不到该文件或您尝试访问该文件的任何位置时,抛出FileNotFoundException。 检查文件路径,然后重试。

答案 2 :(得分:0)

我不确定这一点,但我认为您可以尝试使用格式化程序,如果文件不存在,格式化程序会创建该文件。

Formatter formatter = new Formatter (file);

我希望它有所帮助。

答案 3 :(得分:0)

找到解决方案: 你必须像这样打开Streams:

FileInputStream  inputStream = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(inputStream);

与输出相同。这对我来说是固定的,如果有人偶然发现这个问题来寻找答案。