2010-10-11 98 views
0

我試圖在我的onCreate方法中運行這段代碼作爲初始測試,爲要使用的應用程序編寫私有數據。此代碼是直出位於here錯誤:FileOutputStream可能無法初始化

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

然而,Android SDK開發指南,這個代碼給我在底部的3行代碼中的錯誤。該錯誤是未處理的異常。建議的快速修復被做到以下幾點:

String FILENAME = "hello_file"; 
    String string = "hello world!"; 

    FileOutputStream fos; 
    try { 
     fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fos.write(string.getBytes()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fos.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

但這樣做,我得到一個錯誤的底部兩行其中規定,FOS可能無法初始化後。我怎樣才能解決這個問題?

回答

2

更換

FileOutputStream fos; 

FileOutputStream fos = null; 
+0

我明白了,那有效。也許是時候我終於開始學習java中的異常:) – 2010-10-11 15:23:18

+0

在這種情況下...在哪裏檢查創建的文件...? – 2012-02-21 06:44:19

1

是,這裏的問題是,如果你得到一個FileNotFoundException異常嘗試剛剛打印出來的異常並繼續下去,但在這種情況下,FOS變量將從來沒有被賦值,因爲「openFileOutput」調用不會完成。這很好,因爲在您無法打開文件的情況下,您不想繼續嘗試寫入未打開的文件。

由於FileNotFoundException異常是IOException異常,可以簡化這一切爲:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

try { 
    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    fos.write(string.getBytes()); 
    fos.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

在這種情況下,將引發異常的第一件事導致堆棧跟蹤打印機會,你跳過任何後續在try {}塊的其餘部分執行操作。

水泥的答案的問題是,雖然它由編譯器錯誤得到,如果第一個塊拋出異常,第二個塊會給你一個NullPointerException。

+0

很抱歉讓這條線長時間重新生效。我從'asset'文件夾中讀取一個文件,然後使用'FileOutputStream'寫入該文件。我的問題是'FileOutputStream'保存的文件路徑。 – 2015-08-26 04:47:40

相關問題