2011-11-15 81 views
1

我正在嘗試做某種序列化,我可以直接從文件讀取和寫入對象。Java Android中的EOFException?需要幫助

我剛開始寫一個字符到文件並試圖讀取它。這總是給我EOF例外。

我正在Android設備上嘗試它。這裏是我的代碼:

public class TestAppActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     WriteToFile(); 
     Load(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

public void Load() throws IOException 
{ 
    InputStream fis; 
    ObjectInputStream in = null; 
    try { 
     fis = new FileInputStream(Environment.getExternalStorageDirectory() + "\\test2.ser"); 
     in = new ObjectInputStream(fis); 
     char temp = in.readChar(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     in.close(); 
    } 
} 

public static void WriteToFile() throws Exception { 
    try { 
     OutputStream file = new FileOutputStream(Environment.getExternalStorageDirectory() + "\\test2.ser"); 
     ObjectOutput output = new ObjectOutputStream(file); 
     try { 
      output.writeChar('c'); 
     } finally { 
      output.close(); 
     } 
    } catch (IOException ex) { 
      throw ex; 
    }catch (Exception ex) { 
     throw ex; 
} 
} 
} 
+0

您是否已驗證函數'WriteToFile'是否正常工作? –

+0

顯示來自EOFException的跟蹤。在什麼情況下引發異常? –

回答

1

在這種情況下,拋出:EOFException意味着沒有要讀取更多的數據,這(再次在這種情況下)只能意味着該文件是空的。

爲什麼你使用ObjectInput/OutputStreams但只寫字符?對於這種用法,您最好使用DataInput/OutputStreams

此外,捕捉例外只是爲了重新拋出它們沒有意義。

另外,從文件中讀取char是沒有意義的,除非您要將它放在除了方法返回的局部變量以外的地方。

-1

我已經在我的示例項目中導入了此代碼,並進行了以下更改。

我將"\\test2.ser"替換爲"/test2.ser",它工作。請試試這個。

+0

不解釋EOFException。 – EJP