我知道有可能是噸這些四處走動(並相信我,我試了很多時,經歷了這個權利),但我似乎無法得到這個去。 我試圖將自定義對象(汽車)列表保存到本地存儲的文件中,稍後通過單擊按鈕加載它們。 我一直試圖使用FileOutputStream基於我讀過的很多來源。某些原因,當使用簡單的字符串列表進行測試時,它工作得很好,但是當涉及到我自制的對象時,我在嘗試保存時不斷收到IO異常。如果任何人都可以看看我的代碼,並告訴我我錯過了什麼(花費超過20小時試圖自己排除這個自己沒有運氣)。 P.S保存和加載方法被按鈕調用,它工作正常,所以代碼被忽略。Android Java保存到文件返回IOException
public class Main extends Activity implements OnClickListener{
public static List<Car> carList = new ArrayList<Car>();
String FILENAME = "carListFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonView_saveb;
Button buttonView_loadb;
buttonView_saveb = (Button)findViewById(R.id.saveb);
buttonView_loadb = (Button)findViewById(R.id.loadb);
buttonView_saveb.setOnClickListener(this);
buttonView_loadb.setOnClickListener(this);
@Override
public void onClick(View view){
switch (view.getId()){
case R.id.saveb:
SaveData();
break;
case R.id.loadb:
LoadData();
break;
}
}
public void LoadData(){
ArrayList<car> toReturn;
FileInputStream fis;
try {
fis = openFileInput(FILENAME);
ObjectInputStream oi = new ObjectInputStream(fis);
toReturn = (ArrayList<Car>) oi.readObject();
oi.close();
} catch (FileNotFoundException e) {
System.out.println("Failed to load, file '"+FILENAME+"' not found");
} catch (ClassNotFoundException e) {
System.out.println("Failed to load from file '"+FILENAME+"', Class not found");
} catch (IOException e) {
System.out.println("Failed to load from file '"+FILENAME+"', I/O Exception")
}
}
// this method return io exception, no idea why
public void SaveData(){
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream of = new ObjectOutputStream(fos);
of.writeObject(diveLog);
of.flush();
of.close();
} catch (FileNotFoundException e) {
System.out.println("Failed to save, file '"+FILENAME+"' not found");
} catch (IOException e) {
System.out.println("Failed to save to file '"+FILENAME+"', I/O Exception");
}
}
}
無論我做什麼,都會讓我獲得IO異常。 還注意到,我有一個按鈕,將汽車添加到列表,所以我不會保存一個空列表(雖然我不明白爲什麼應該重要)。
你可以看到更多有關錯誤的詳細信息,例如e.printStackTrace() – CocoNess 2014-10-03 13:07:19
嘗試發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – ericbn 2014-10-03 13:10:51
你不是在FileInputStream上調用close(),也不在FileOutputStream上調用。你想打開一個已經打開(而不是關閉)的文件嗎? – Giovanni 2014-10-03 13:41:07