我試圖創建一個目錄層次結構,然後從我的資產中複製一個文件到新創建的目錄中。我已經使用了這裏提供的代碼示例在stackoverflow,但我沒有得到任何地方。本質上我的代碼是這樣的:Android文件系統上的目錄和文件創建
InputStream in = getAssets.open(mydb.sqlite);
File dir = new File("/data/data/my.package/databases/");
dir.mkdirs();
out = new FileOutputStream("/data/data/my.package/databases/mydb.sqlite");
while ((len = in.read(buffer)) > 0)
{
out.write(buffer, 0, len);
}
out.flush();
out.close();
in.close
這一切都在第一次啓動的主要活動內完成,當然應該只做一次。在代碼運行之前,唯一存在的目錄是/ data /。是的,這是一個數據庫文件,但這一點不應該在這一點上,因爲我只是複製文件,並沒有試圖用數據庫代碼訪問它。
該代碼不會拋出任何異常,並且dir.mkdirs()返回true。無論如何,目錄不會被創建,並且文件不會被複制。我已經在我的清單中添加了WRITE_EXTERNAL_STORAGE的權限行,正如幾個地方所建議的,FWIW。我可以通過代碼,一切似乎都很好。但當然不是。
我需要在這裏尋找什麼?文件權限問題?爲什麼代碼認爲一切都在那裏(即,當它到達複製代碼時,它不會拋出FileNotFoundException),但實際上文件系統上沒有任何內容?
編輯:這是我所學到的。 getDir()在/data/data/my.package/app_*中創建目錄。不知道爲什麼它在目錄名稱上使用此前綴。如果您需要將某些內容放置在標準位置(如數據庫/文件/文件夾),這將不起作用。
加入到這個,你不需要寫/數據/數據/目錄 –
nandeesh
據商務部WRITE_EXTERNAL_STORAGE許可,openFileOutput()不接受文件名參數路徑分隔符。 getDir()具有相同的限制。我需要將目錄設置爲/data/data/my.package/databases/,因爲這是SQLiteOpenHelper希望查找數據庫的地方。我錯過了什麼嗎? –