Android - SD 카드에 파일 읽고 쓰기, SQLite3 조작하기

Posted by 겨울에
2011. 2. 3. 21:10 scrap/ Android

출처 : http://blog.naver.com/alonglog/130096289426


안드로이드 - SD 카드에 파일 읽고 쓰기, SQLite3 조작하기


파일 조작...!

 

안드로이드 폰의 앱은 자바로 개발된다. 당연히 자바의 입출력을 이용하면 쉽게 가능하다.

하지만 안드로이드 개발 툴킷(이하 SDK)에서는 안드로이드에서 쉽게 사용할 수 있는 API를 제공한다.

 

그 함수는 openFileOuput()과 openFileInput()이다.

이 두 함수는 자바의 파일 입출력을 안드로이드에서 쉽게 해주는 함수들이다.

하지만 이 두 함수의 경우 경로 구별자인 "/"가 파일 이름에 존재하면 에러를 반환해버린다.

즉 현재의 앱폴더가 아니라면 파일을 생성할 수가 없다.

 

이 말은 SD 카드에 파일을 생성할 수 없다는 것을 말한다.

 

SD Card에 파일을 생성하기 위해서는 자바의 파일 조작 API를 이용할 수 밖에 없다.

파일 조작 API를 이용하기 전에 가장 먼저 할일!!!

 

SD 카드에 파일을 쓸 수 있는 권한을 주는 것이다.

"AndroidManifest.xml" 파일에 권한을 명시해야 SD 카드에 파일을 쓸 때 에러가 발생하지 않는다.

 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

위 문장을 추가해 주자!!  그래야만 읽고 쓸 수 있다.

 

그럼 이제 파일을 쓰는 방법에 대해서 알아보자.

 

우선 SD 카드의 경로를 알아낸 후 객체를 생성하고 쓸 수 있는지 확인한 후

파일을 생성한다. 그리고 원하는 글을 쓴다.

이를 수행하는 코드는 아래와 같다.


File root = Environment.getExternalStorageDirectory()

 

if(root.canWrite()){

File file = new File(root, "파일명");

 

FileWriter writer = new FileWriter(file);

BufferedWriter out = new BufferedWriter(writer);

 

out.write("쓸 내용");

} else{

 쓸 수 없다면 권한에 대해서 다시 한 번 확인하자.

}


위 코드에는 표시되어 있지 않지만 예외상황이 발생할 수 있는 함수들이기 때문에 IOException 처리를 해줘야 한다.

 

다음은 파일을 읽어오는 코드이다.

 

File root = Environment.getExternalStorageDirectory()

 

if(root.canWrite()){

File file = new File(root, "파일명");

 

FileReader reader = new FileReader(file);

BufferedReader in = new BufferedReader(reader);

 

String str = reader.readLine();

} else {

 읽을 수 없음. 권한 문제를 확인해보자.

}

 


위 코드에서 readLine()이 null 문자를 반환할 때까지 읽으면 파일의 내용을 모두 읽어 올 수 있다.

 

=================================================================================-

 

SQLite3 다루기.

 

Android SDK에서는 기본적으로 SQLite3 API를 내장하고 있다.

 

간단하게 객체를 생성하고 쿼리하는 방법을 정리하고 넘어가자.

 

전체적인 코드를 적고 필요한 내용을 주석으로 처리하는 식으로 정리하고 넘어가겠다.

 

//DB 생성

//원형 : openOrCreateDatabase(String name, int mode, CursorFactory factory)

//name : DB 이름

//mode 

// MODE_PRIVATE : 자기 자신만 접근 가능

// MODE_WORLD_READABLE : 누구나 읽기 가능

// MODE_WORLD_WRITEABLE : 누구나 쓰기 가능

//factory : ???

SQLiteDatabase myDatabase = openOrCreateDatabase("DB 이름", 모드, null)

//테이블 생성

//void execSQL(String sql) throws SQLException

//sql : SQL 문법을 따르는 쿼리문

//myDatabase.create(CursorFactory factory)를 이용해서도 생성 가능

myDatabase.execSQL(query);

 

//레코드 입력

//long myDatabase.insert(String table, String nullColumnHack, ContentValue values)를 이용해서도 생성 가능

myDatabase.execSQL(query);

 

//레코드 값 쿼리

//리턴 값이 존재하기 때문에 execSQL() 함수를 사용하면 안됨

//원형 Cursor SQLiteDatabase.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

//인자 값들은 Select 문 쿼리에서 사용하는 문법들이다.

//자세한 내용을 developer.android.com이나 SQL 쿼리문에 관해서 검색해보자.

Cursor log_cur = myDatabase.query("테이블 이름", null, null, null, null, null, null);

 

//레코드 삭제하기

//int SQLiteDatabase.delete(String table, String whereClause, String[] whereArgs)을 이용해도 가능

myDatabase.execSQL(query);

 

//테이블 삭제하기

//함수를 보지 못했다..

myDatabase.execSQL(query);

 

이상으로 데이터베이스 및 테이블을 생성하고 다루는 방법을 알아봤다.

 

======================================================================-