*assets폴더의 mylib.db를 동적으로 /data/data/com.romen.mylib/databases/mylib.db로 바꿀려고 합니다.
이곳에서 search한 소스로 만들었는데 전혀 작동하지 않는 것 같습니다.
버튼을 클릭후 File explorer상에 해당 폴더 확인해도 파일 복사는 커녕 폴더도 만들어 있지 않습니다.
한수 가르켜 주세요.
실행 파일도 올립니다.
미리 감사드립니다.
package com.romen.myDB;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class myDB extends Activity {
public void setDB() {
AssetManager assetManager = getResources().getAssets();
File outfile = new File("/data/data/com.romen.myDB/databases/mylib.db"); //--폰에 위치할 경로
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
is = assetManager.open("assets/mylib.db", AssetManager.ACCESS_BUFFER);
filesize = is.available();
if(outfile.length() != filesize || !outfile.exists()){
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();
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(btnListener);
}
private OnClickListener btnListener = new OnClickListener(){
public void onClick(View v){
setDB();
}};
}
1. 일단 메니페스트에 퍼미션을 줘야하고요
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
그리고 돌려보니 소스상에 두가지 문제가 있더군요.
2 assetManager의 기본위치
is = assetManager.open("mylib.db", AssetManager.ACCESS_BUFFER);
assetManager를 사용하면 "assets"폴더에서 찾으므로 굳이 폴더를 추가할 필요가 없겠죠?
3. databases 폴더를 직접 만들어 주셔야합니다.
File folder = new File(mRootPath + "databases");
if(folder.exists()) {
Log.d("cap", "폴더 있당");
}
else {
folder.mkdirs();
Log.d("cap", "폴더 없당");
}
4. 정리하자면
. 메니페스트에서 파일 쓰기/읽기 권한추가
. 에셋매니저의 기본 위치 문제
. DB 폴더가 있는지 체크하여 없으면 생성
. DB파일 복사
그러면 그림(DDMS화면)과 같이 파일이 복사됩니다.
이상입니다.
파일쓰기 퍼미션을 열었는지 부터 확인해 보세요