找到解决方案: 你必须像这样打开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
。
我做错了什么?
答案 0 :(得分:2)
如果文件存在但是是目录而不是常规文件,那么 不存在但无法创建,或无法打开任何其他 之所以抛出FileNotFoundException。
在您的情况下,我认为该文件被视为目录,因为它没有扩展名,因此抛出异常。
答案 1 :(得分:0)
当程序在磁盘中找不到该文件或您尝试访问该文件的任何位置时,抛出FileNotFoundException。 检查文件路径,然后重试。
答案 2 :(得分:0)
我不确定这一点,但我认为您可以尝试使用格式化程序,如果文件不存在,格式化程序会创建该文件。
Formatter formatter = new Formatter (file);
我希望它有所帮助。
答案 3 :(得分:0)
找到解决方案: 你必须像这样打开Streams:
FileInputStream inputStream = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(inputStream);
与输出相同。这对我来说是固定的,如果有人偶然发现这个问题来寻找答案。