2011-09-19 61 views
0

我對android非常陌生。我想創建一個安裝包,將文件放在android文件系統的應用文件夾(/data/data/my.app/...)中。是否可以在安裝時將文件放入android文件系統?

我想這樣做,所以我可以使用標準的java文件方法訪問文件(以便重用我自己的代碼),而不必使用android資源訪問方法。

我認爲在這個方向上可能實現的唯一方法是將文件放在/ res文件夾中,並在運行時將它們複製到文件系統(例如第一次運行)。這有缺點,無緣無故每個文件有兩個副本。

另一種方式可以讓我的應用程序從服務器上下載這些文件(在另一個答案中也看到了這個選項)。這是可能的,但我希望避免必須搭起文件服務器這樣一個簡單的任務...

據我瞭解,DDMS在這裏沒有幫助,因爲它只允許我手動訪問文件夾,應用程序安裝後。

我的問題是:是否有不同的方式來實現我原來的目標(使用標準的Java方法訪問文件)?如果沒有,是否有更簡潔的方式將文件放在文件系統上?

謝謝!

回答

1

有3種方法我能想到的是避免重複:

  1. 至於你提到使用RES /原始文件夾中。如果您現有的代碼使用可以使用InputStream而不是File並使用Resources.openRawResource(),則可避免重複。
  2. 使用資產文件夾並使用文件AssetManager.openNotAssetFd()訪問文件。這又需要使用Streams not File類。如果您的文件被壓縮,因爲資產是內存映射的,這可能會變得有點麻煩。
  3. 如果你的代碼真的綁在File(不只是用它來打開InputStream)。爲避免重複,您可以在第一次運行時從網上下載文件並將其存儲到外部存儲器中。
+0

非常感謝您的幫助!從你的迴應中我可以得知,這樣做並不是真正的「正確」方式。由於我需要的是一個完整的目錄結構,從我的項目外部創建(而不僅僅是一些文件),似乎使用資產機制是正確的。目前,我只是遞歸地將它們複製到文件系統(導致重複)。如果它們變得太大,我想我會轉而從網上下載它們。再次感謝! – DannyA

1

你可以把你的文件的下/ RES /生,然後使用:

Resources res = context.getResources(); 
InputStream in_s = res.openRawResource(R.raw.myfile); 

或者,如果你想要的文件對象

File f = new File(context.getResources().openRawResource(R.raw.myfile)); 

然後你可以使用普通的Java API來與你的文件一起工作。

相關問題