파일을 읽고 쓰는 위치들의 종류
안드로이드에서 파일들이 저장되는 저장 장치는 크게 두 가지로 구별 됩니다.
- 내부 메모리 (internal memory): 기기 내 보드에 장착된 플래시 메모리
- 외부 메모리 (external memory): 기기의 슬롯에 삽입 또는 제거될 수 있는 기기 외부 저장 장치
내부 메모리 (Internal Memory)
접근하고자 하는 파일의 위치가 내부 메모리의 어디인가에 따라 호출해야 할 메소드가 달라집니다. 크게 세 가지 경우를 들 수 있습니다.
- 어플리케이션 고유의 경로
- 어플리케이션 파일(APK) 내에 있는 리소스 파일
- 내부 메모리 안 임의의 위치
어플리케이션 고유의 경로
안드로이드 어플리케이션은 자신의 고유한 경로에 파일을 읽거나 기록할 수 있습니다. 경로는 다음과 같습니다.
/data/data/앱의 패키지 이름/files
예를 들어 보죠. 어플리케이션의 패키지가 me.blog.netrance.file_test_app이면, 그것의 고유 경로는 /data/data/me.blog.netrance.file_test_app/files입니다.
자바의 파일 입출력 객체로 파일에 접근하는 코드를 작성할 때, 파일의 이름만 작성하세요. 그러면 그 파일의 경로는 앱의 고유 경로로 간주 됩니다. 아래 코드는 test.txt라는 파일을 읽기 전용으로 열기를 수행합니다.
OutputStreamWriter outputStreamWriter
= new OutputStreamWriter(openFileOutput("test.txt", MODE_PRIVATE);
|
주의해야 할 점은 그 패키지 이름을 갖는 앱만 위 경로에 접근할 수 있다는 점입니다. 다른 앱이나 DDMS로는 그것에 직접 접근할 수 없습니다. 단, AVD와 루팅 된 기기의 경우에는 예외입니다.
어플리케이션 파일(APK) 내에 있는 리소스 파일
프로그래머가 정의하는 리소스 파일들은 빌드 후 APK 파일 내에 통합 저장 됩니다. 안드로이드는 앱의 res/raw 폴더에 속하는 리소스 파일에 접근할 수 있는 메소드를 제공합니다. 그것은 바로 Resources 클래스의 openRawResource()입니다.
참고로 APK 파일은 압축 파일이므로 ZIP 프로그램으로 그것을 풀 수 있습니다. 그러면 res 폴더를 찾아 보실 수 있습니다. 그 안에 raw 폴더가 있습니다. 단, 빌드하기 전에 프로젝트의 res 폴더가 raw를 포함한 경우에 한합니다.
내부 메모리 안 임의의 위치
안드로이드 어플리케이션은 내부 메모리 안에서 OS가 허용한 영역에 속한 파일들에 접근할 수 있습니다.
외부 메모리 (External Memory)
SD 카드와 같은 외부 메모리에 저장된 파일 또한 안드로이드가 읽고 쓸 수 있습니다. 파일에 접근하는 메소드를 호출하실 때, 파일의 경로의 맨 앞에 "sdcard/"를 작성하세요. 이것은 외장 메모리의 루트에 해당됩니다. 또는 Environment.getExternalStorageMemory() 메소드를 호출해서도 외장 메모리의 경로를 구할 수 있습니다.
댓글
댓글 쓰기