마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

assets 폴더 내의 DB 파일 읽기,쓰기

0 추천
assets 폴더 내에 이미 다른 앱으로 만들어둔 sqlite 파일을 저장하고, 현재 앱에서는 이 파일..

그러니까 경로는 대강 /data/data/패키지명/assets/filename 이렇게 되겠네요.. 이걸 열어서 지지고 볶고 가능한지요?;

대충 해보니 안 되는거 같기도 하고... 정확한 답변 알고계신분 좀 알려주세요~
인연 (31,880 포인트) 님이 2013년 12월 10일 질문

3개의 답변

0 추천
 
채택된 답변

asset 폴더는 안드로이드파일중에서 컴파일이 필요없는 파일들이나 직접 그 폴더로 엑세스 해서 디렉토리탐를탐색해 바assetmanager클래스를 이용해서 읽고 쓰고 지우고 할수있는용도로 알고있구요

자세한 설명은 https://developer.android.com/tools/projects/index.html

 

저기 asset에 db를 넣어놓고 /data/data/packageName/databases 로 파일복사를 하는건 안드로이드 Sqlite에서 db커넥션 권한이 외부에서는 커넥션을 못하게하도록 해 자기 apk경로의 폴더로 옮겨놓고 접속을 하는걸로 알고있습니다.( 개인관리용) 

http://developer.android.com/reference/android/database/package-summary.html

http://developer.android.com/reference/android/database/sqlite/package-summary.html

bangbang (8,820 포인트) 님이 2013년 12월 11일 답변
인연님이 2013년 12월 11일 채택됨
0 추천
assets경로에 있는 파일은 참조만 가능 한것으로 알고있습니다.

 

내용을 변경을 하려면 변경이 가능한 다른 위치로 복사를 하고 사용을 하시면 됩니다.

(예: SDCARD영역, database용폴더 등)
이라슈 (8,770 포인트) 님이 2013년 12월 10일 답변
0 추천
public void CopyDB(String DBname){
AssetManager assetManager = this.getResources().getAssets();
File outfile = new File(ROOT_DIR + DBname); 
 
InputStream is = null;
 
FileOutputStream fo = null;
 
long filesize = 0;
 
try{
 
is = assetManager.open(DBname, AssetManager.ACCESS_BUFFER);
filesize = is.available(); 
if (outfile.length() <= 0)
{
byte[] tempdata = new byte[(int) filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
}
} catch (IOException e)
{
}
}
 
이런식으로 에셋에있는 db파일을 복사하셔서 쓰시면 사용가능합니다.
열심히잘할게요 (1,260 포인트) 님이 2013년 12월 10일 답변
...