2013-04-01 43 views
0

找到了解決辦法: 您必須打開流是這樣的:序列化的簡單對象IOException異常

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

與相同輸出。這對我來說是固定的,任何人都會在尋找答案時偶然發現。

原題: 通過與Toast個幾測試中,我發現,當我調用構造函數用於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

找到了解決辦法: 您必須打開流是這樣的:

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

與相同輸出。這對我來說是固定的,任何人都會在尋找答案時偶然發現。

0

當程序在磁盤中找不到文件或無論您嘗試訪問文件的位置時,都會引發FileNotFoundException。 檢查您的文件路徑,然後重試。

+0

我通過檢查文件是否存在以及是否不創建它來避免'FileNotFoundException'。在OOS的構造函數調用中發生IOException。 –

+0

同樣,您正在避免FileNotFoundExecption,但您在獲取IOException之後。你確定你的文件路徑嗎? – javadev

+0

我只是把一個字符串,而不是我的文件路徑,說「測試」。仍然得到FileNotFoundException。 當我打開流時不應該創建它嗎? –

0

我不確定這一點,但我認爲你可以嘗試使用格式化程序,格式化程序創建文件,如果它不存在。

Formatter formatter = new Formatter (file); 

我希望它有幫助。

2

這裏的Oracle文檔爲FileOutputStream

摘錄如果該文件存在,但它是一個目錄,而不是一個普通的文件,並 不存在,但無法創建,或者無法打開任何其他 原因然後引發FileNotFoundException。

在你的情況,我認爲該文件被視爲一個目錄,因爲它沒有擴展名,所以拋出異常。

+0

我添加了一個擴展,仍然引起FNFE拋出 –

+0

@AdrianJandl,我只是在做假設,你必須調查您的問題基於文檔提及的情況。您確定沒有任何東西阻止文件被創建或打開嗎? – Egor