안드로이드 개발 질문/답변
(글 수 45,052)
assets 폴더에 1MB 이하로 분할된 디비파일을 여러개 놔두고
실행시 /data/data/패키지명/databases/db파일명 으로 합치는 코드를 만들었는데요,
에뮬레이터에서 실행 시에 databases 라는 폴더를 만들어 놓으면 분할된 파일이 정상적으로 합병이 되어 하나의 db 파일이 되고
databases 라는 폴더가 없으면 합병이 안됩니다.
f = new File("/data/data/myandroid.app.test/databases/length_2.db");
fos = new FileOutputStream(f);
위와 같이 출력스트림을 만들었습니다.
안드로이드 내에 유닉스 파일시스템에서 권한 때문인지.... 이유를 모르겠네요,
저같은 문제 겪어 보신분 없나요??
아 그리고 어플 설치하고 최초 실행시에만 분할된 db 파일을 합쳐서 모바일기기내에 파일시스템에 위치하게끔 할려고하는데
최초 실행인지 아닌지 구별을 어떻게 해야 되는지 모르겠어요,...
두가지 질문에 답변 꼭~~!! 좀 부탁드릴께요, 도와주세요
첫번쨰 질문의 답은 아마 찾아보시면 발견하실 수 있을것 같구여...
두번째 질문의 답변은 제 위주로 사용하는 방법의 코딩을 소개 드리니
참고 바랍니다...
//xxx.db 파일을 복사
public void setDB() {
File outfile = new File("/data/data/com.android.onair/databases/xxx.db");
AssetManager assetManager = getResources().getAssets();
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
is = assetManager.open("database/xxx.db", AssetManager.ACCESS_BUFFER);
filesize = is.available();
// 패키지 폴더에 설치된 DB파일이 복사할 DB파일과 크기가 같지않을 경우 DB파일을 덮어 쓴다.
if(outfile.length() != filesize){
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) {
e.printStackTrace();
}
}
도움이 되셨으면 좋겠습니다...