안드로이드는 보안상의 이유로 모바일 디바이스의 내장 메모리를 통한 파일을 여러개의 어플리케이션에서 공유하는 것이 여러모로 불편하게 되어 있습니다. 하지만 외장 메모리인 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 카드를 사용할 수 있다고 나오지만 실제로 파일을 쓰거나 읽을 수 없으니.. 반드시 이 설정값을 추가하기 바랍니다.
좋은 정보 감사합니다.ㅋ^^
댓글 감사드립니다..
파일이 왜 않써지나 했더니.. 파일 쓰기 관련 퍼밋셔니가…. 필요했군요.
덕분에 해결될듯 합니다. 미리 감사합니당…. ^^
^^