0

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

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

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

原始问题: 通过对Toasts 的一些测试,我发现当我调用构造函数时,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

4 回答 4

2

这是FileOutputStream的 Oracle 文档的摘录

如果文件存在但是是目录而不是常规文件,不存在但无法创建,或者由于任何其他原因无法打开,则抛出 FileNotFoundException。

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

于 2013-04-01T08:27:08.290 回答
0

当程序在磁盘中或您试图访问该文件的任何地方找不到该文件时,将引发 FileNotFoundException。检查您的文件路径,然后重试。

于 2013-04-01T08:20:03.883 回答
0

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

Formatter formatter = new Formatter (file);

我希望它有所帮助。

于 2013-04-01T08:23:30.013 回答
0

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

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

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

于 2013-04-01T12:00:06.667 回答