차근차근/Android

[Android/안드로이드] SD Card 사용하기. ( 접근하기 )

예쁜꽃이피었으면 2014. 7. 29. 00:39

http://aroundck.tistory.com/242
안녕하세요 돼지왕 왕돼지입니다.
오늘은 SD Card ( External Storage ) 를 사용하는, 혹은 접근하는 방법에 대해서 함께 알아보겠습니다.


Permission.

  
SD 카드의 파일을 읽는 것은 아무런 Permission 없이 가능합니다만, 파일을 쓰는 것은 Permission 이 필요합니다. Manifest에 다음과 같이 기술해줍니다. 

 

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


APIs

 
static String getExternalStorageState() 
 : SD 카드의 현재 상태 조사 MEDIA_MOUNTED / MEDIA_UNMOUNTED
 
static File getExternalStorageDirectory()
  : SD 카드가 마운트된 경로. 보통 /sdcard
 
static File getRootDirectory()
static File getDataDirectory()
static File getDownloadCacheDirectory()


String ext = Environment.getExternalStorageState();
String sdpath = Environment.getExternalStorageDirectory().getAbsolutePath();
String rootdir = Environment.getRootDirectory().getAbsolutePath();
String datadir = Environment.getDataDirectory().getAbsolutePath();
String cachedir = Environment.getDownloadCacheDirectory().getAbsolutePath();


<example>

 

File dir = new File(sdpath + "/dir");
dir.mkdir();
 
//Save
File file = new File(sdpath + "/dir/file.txt");
try{
   FileOutputStream fos = new FileOutputStream(file);
   String str = "This file exists in SDcard";
   fos.write(str.getBytes());
   fos.close();
}
catch(Exception e){;}
 
//Load
try{
   FileInputStream fis = new FileInputStream(sdpath + "/dir/file.txt");
   byte[] data = new byte[fis.available()];
   while(fis.read(data) != -1) {;}
   fis.close();
}
catch (Exception e) {;}

 

 


[에뮬레이터에서 SD Card 만드는 방법]

접기

 

> mksdcard [-l 레이블] 용량  파일명

 -> 용량은 8M 이상

 -> 파일명은 ISO 파일과 비슷하다고 생각하면 된다.

 

접기

-----------------------------------------------------------------------------

http://tjandroid.blogspot.kr/2010/12/sdcard.html

sdcard 파일 입출력

 sdcard 파일 입출력
참조(공식 안드로이드 개발 사이트): http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

1. sdcard 에 접근하기 위해 manifest 파일에 permission 을 추가해 준다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. sdcard 가 마운트 되었는지 또는 쓰기 가능한지 등의 상태를 확인한다.
String state = Environment.getExternalStorageState()
 - state 가 Environment.MEDIA_MOUNTED 이면 마운트되어 있고 쓰기 가능하다.
 - state 가 MEDIA_MOUNTED_READ_ONLY 이면 마운트되어 있고 읽기만 가능하다.
 - 그외 는 sdcard 에 접근 할 수 없는 경우다.

3. sdcard 의 File 객체를 받는다.
API level 7 까지는 Environment.getExternalStorageDirectory() 를 사용한다.
API level 8 부터는 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 를 사용할 수 있다.
예) File path = Environment.getExternalStorageDirectory();

4. File 객체를 만든다.
위에서 받은 File 객체를 path 로 넣어준다.
예) File file = new File(path, "filename");

5. 파일을 조작한다.
 - 바이너리 파일 입출력은 FileInputStream/FileOutputStream 클래스를 이용한다.
 - 텍스트 파일 입출력은 BufferedReader/BufferedWriter 클래스를 이용한다.

#) getExternalStorageDirectory 함수를 사용하지 않고 "/sdcard/filename" 등의 경로를 File 생성자에 직접 넣어주면 IllegalArgumentException (예 'File /sdcard/filename contains a path separator') 이 발생한다.

 


반응형