2011-03-08 5 views
1

SQLiteOpenHelper를 확장하는 DB 도우미 클래스가 있으며 onCreate에서 각각 단일 SQL CREATE 명령을 포함하는 다양한 텍스트 파일을 읽고 싶습니다.AssetManager openFD()를 사용하는 데 문제가 있습니다.

java.io.FileNotFoundException: /npvr_db_schema_create_tables.txt 

이 분명히 보인다 ... 다음과 같이

@Override 
public void onCreate(SQLiteDatabase db) { 

    AssetManager am = context.getAssets(); 
    FileReader tableListFileReader = new FileReader(am.openFd(context.getString(R.string.db_schema_filelist_filename)).getFileDescriptor()); 

내가 예외가 ... 텍스트 파일은 내 프로젝트의 자산 폴더에 나는 다음과 같이을 FileReader를 사용하려고 해요 다른 AssetManager의 'open'메소드는 'assets'폴더의 파일에 액세스하는 것으로 문서화되는 반면 루트 ('/')의 절대 경로 여야합니다. 불행히도 이러한 메소드는 FileReader를 직접 인스턴스화하는 데 사용할 수없는 InputStream을 리턴합니다.

이것은 나에게 이해가되지 않습니다. 확실하게 AssetManager는 그것이 무엇인지 말하고 내 자산 폴더에 대한 액세스 권한을 부여해야합니다. 내가 여기서 뭔가를 놓치고 있니? 더 나은 방법으로 어떻게 접근해야합니까?

답변

3

다음은 저작물을 읽는 데 필요한 API 데모입니다. 파일 이름의 의미는 FD를 열기와 동일합니다 :

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html

자산은 당신의 "입술"디렉토리와 같은 수준에서 "자산"디렉토리에 넣어 추가됩니다. (이것을 보시려면 ApiDemos 전체 소스 코드를보십시오.)

문자열 자원에서로드 할 자산의 파일 이름을 가져 오는 것이 일반적이지 않습니다 ... 당신은 아마 그 일을하고 싶지 않을 것입니다.

+0

감사합니다. 파일 이름에 "/"접두어가 실제로 문제를 일으킨 문자열 리소스에있었습니다. 예제에 대한 포인터를 사용하면 필요한 작업을 완료하는 데 도움이되었습니다. 문자열 리소스를 사용하는 것이 나쁜 이유는 없습니다. 즉, 코드의 여러 지점에서 액세스 할 수있는 assets 폴더의 알려진 파일 이름을 문자열 리소스로 저장해야하는 이유는 없습니다. 글쎄, 내가 이름을 바르게하고 "/"문자 앞에 붙이지 마라. ;-) – Squonk

관련 문제