2014-12-07 115 views
2

我想爲Android編寫我的第一個應用程序。我以前就認識Java,但自從使用Java之後已有一兩年時間。你可以在Android中創建一個.dat文件嗎

我想創建一個簡單的文件在內部存儲 - 我知道我不必設置任何權限來創建這樣的文件?

  • 這是一個.dat文件我需要如果我想保存一個ArrayList? Android在創建時是否要求我使用文件擴展名?

即使只是嘗試基本的文件創建 - 檢查文件的存在,然後創建它,如果它不存在 - 不起作用。誰能告訴我我做錯了什麼? (我已經註釋了讀取ArrayList的嘗試,因爲我甚至不能創建該文件,只是嘗試基本的文件創建。) (另外,我已經嘗試了與「Shares.dat」代碼而不是「股份」作爲文件名,也沒有工作,我甚至不知道Android是否能識別.dat文件,說實話我不是100%確定這是我需要的文件。)

(如果通過任何人都可以幫忙的機會,我可能無法測試任何解決方案,直到下週末......)

至於最後一行,原本它讀'context.getFileDir()',但我的類擴展ActionBarActivity和我在互聯網上發現了suggesti開始更改爲this.getFileDir()。我得到一個空指針的警告,當我用context.getFileDir()

file = new File("Shares"); 

if (file.exists()){ 
    url.setText("File Exists"); 
    /*try{ 
    is = openFileInput("Shares"); 
    oi = new ObjectInputStream(is); 
    details = (ArrayList<Action>)oi.readObject();//warning 
    oi.close();//need finally?? 
    } 
    catch(Exception e){url.setText((e.getMessage()));} 
    url.setText(details.get(0).getAddresse());*/ 
} 
else 
{ 
try 
{ 
      **file = new File(this.getFilesDir(), "Shares");** 

} 
catch(Exception e){url.setText((e.getMessage()));} 
} 

回答

0

如果你想這是一個在私人存儲中創建的文件的引用,你想使用getFileStreamPath("shares.dat"),而不是創建一個新的File對象。文件擴展名應該沒有問題,但最好添加一個文件擴展名來跟蹤這些文件的用途。

例如:

private boolean fileExists(Context _context, String _filename) { 
    File temp = _context.getFileStreamPath(_filename); 
    if(temp == null || !temp.exists()) { 
     return false; 
    } 
    return true; 
} 

然後,如果你想寫一個名爲「shares.dat」文件,那麼你會用openFileOutput("shares.dat", Context.MODE_PRIVATE)。如果您想從該文件讀入,則可以使用openFileInput("shares.dat")

// Read in from file 
if(fileExists(this, "shares.dat")) { 
    FileInputStream fis = this.openFileInput("shares.dat"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    ArrayList<Action> actions = (ArrayList<Action>)ois.readObject(); 
    ois.close(); 
} 

// Write out to file 
FileOutputStream fos = this.openFileOutput("shares.dat", Context.MODE_PRIVATE); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(actions); 
oos.close(); 

上面顯示所有的流操作要拋出IOException,所以一定要根據需要來包裝代碼在try/catch塊的能力。

+0

非常感謝您的回答mceley。我修改了我的代碼: – Tunny 2014-12-07 20:33:55

+0

file = this.getFileStreamPath(「Shares.dat」); (file.exists()){ \t url.setText(「File Exists」); } else { \t url.setText(「File does not exist」); } – Tunny 2014-12-07 20:38:29

+0

對不起,我是新來張貼在這裏,或缺乏這樣做的經驗。上面應該是代碼。我收到消息'文件不存在'。第一行代碼應該自己創建文件嗎? – Tunny 2014-12-07 20:40:45

相關問題