[안드로이드] SD 카드에 파일 생성

안드로이드는 보안상의 이유로 모바일 디바이스의 내장 메모리를 통한 파일을 여러개의 어플리케이션에서 공유하는 것이 여러모로 불편하게 되어 있습니다. 하지만 외장 메모리인 SD 카드의 경우는 이러한 제약이 존재하지 않습니다. 이 글은 안드로이드에서 SD 카드에 파일을 생성하는 것에 대한 정리입니다.

먼저 안드로이드에 SD 카드의 사용 가능 여부를 판단하기 위한 코드는 아래와 같습니다.

String ess = Environment.getExternalStorageState();
String sdCardPath = null;
if(ess.equals(Environment.MEDIA_MOUNTED)) {
    sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    showMsg("SD Card stored in " + sdCardPath);
} else {
    showMsg("SD Card not ready!");
}

showMsg는 안드로이드의 Toast 기능을 좀더 쉽게 사용하기 위한 사용자 정의 매서드로써 아래와 같습니다.

private void showMsg(String msg)
{
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

Toast는 디바이스 화면에 일정 시간 동안 메세지를 띠워주는 기능입니다. 다시 본론으로 돌아가서.. 정적 클래스인 Environment의 getExternalStorageState 매서드의 반환값이 Environment.MEDIA_MOUNTED 인 경우가 SD 카드를 사용할 수 있다는 의미이고 사용 가능하다면 SD 카드가 마운트된 디렉토리 명을 얻기 위해 다시 Environment의 getExternalStorageDirectory 매서드를 사용합니다. 이렇게 얻은 디렉토리에는 보안상의 제약 없이 자유롭게 파일을 읽고 쓸 수 있습니다. 여기서는 파일을 쓰는 코드에 대해 살펴보겠습니다.

File file = new File(sdCardPath + "/test.txt");
try {
    FileOutputStream fos = new FileOutputStream(file);
    String msg = "이 파일은 SD 카드에 저장된 메세지입니다.";
    fos.write(msg.getBytes());
    fos.close();
} catch(FileNotFoundException fnfe) {
    showMsg("지정된 파일을 생성할 수 없습니다.");
} catch(IOException ioe) {
    showMsg("파일에 데이터를 쓸 수 없습니다.");
}

안드로이드는 자바 언어를 통해 플랫폼의 API를 사용할 수 있습니다. 이런 맥락으로 SD 카드에 파일을 생성하고 읽고, 쓰기는 자바의 API를 그대로 사용할 수 있습니다.

끝으로 SD 카드를 사용하기 위해서는 매니페스트 파일에 다음과 같은 설정값을 추가해줘야 합니다.


이 설정값이 없다고 해도 SD 카드를 사용할 수 있다고 나오지만 실제로 파일을 쓰거나 읽을 수 없으니.. 반드시 이 설정값을 추가하기 바랍니다.

“[안드로이드] SD 카드에 파일 생성”에 대한 4개의 댓글

  1. 파일이 왜 않써지나 했더니.. 파일 쓰기 관련 퍼밋셔니가…. 필요했군요.
    덕분에 해결될듯 합니다. 미리 감사합니당…. ^^

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다