Android - 파일 입출력, 파일 공유, SD 카드

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

안드로이드 - 파일 입출력, 파일 공유, SD 카드

파일

 

1) 파일 입출력

   -> 파일 입출력은 예외발생 확률이 높기 때문에 반드시 try - catch 문.

   -> 스트림류는 가비지 컬렉터에 의한 정리대상이 아니기 때문에 꼭 close

 

FileOutputStream openFileOutput (String name, int mode)

FileInputStream openFileInput (String name)


 

mode = MODE_PRIVATE  : 혼자만 사용하는 모드

          = MODE_APPEND  : 파일이 존재할 경우 기존내용에 추가하는 모드

          = MODE_WORLD_READABLE : 다른 응용 프로그램과 파일 읽을 수 있음

          = MODE_WORLD_WRITABLE  : 다른 응용 프로그램이 파일 기록할 수 있음

 

 

boolean deleteFile (String name)

String[] fileList()

 

InputStream openRawResource (int id)

 -> 위치는 res/raw

 

example

FileOutputStream fos = openFileOutput("test.txt", Context.MODE_WORLD_READABLE);

String str = "Android File IO Test";

fos.write(str.getBytes());

fos.close();

 

FileInputStream fis = openFileInput("test.txt");

byte[] data = new byte[fis.available()];

while (fis.read(data) != -1){;}

fis.close();

 

InputStream fres = getResources().openRawResource(R.raw.restext);

byte[] data = new byte[fres.available()];

while(fres.read(data) != -1) { ; }

fres.close()

 

deleteFile("test.txt");




  

2) 파일 공유

 

  : 파일은 기본적으로 생성한 프로그램만 액세스 할 수 있다.

    다른 응용 프로그램과 파일을 공유하려면 여러 가지 조건을 만족해야 한다.

 

   1. 퍼미션에서 (예: -rw-rw-r--) 가장 마지막, 외부에 대한 권한 설정이 되어 있어야 한다.

   2. 해당 파일을 생성한 프로그램의 컨텍스트를 구해야 한다.

 

Context createPackageContext(String packageName, int flags)

  -> 여기서 flag는 CONTEXT_IGNORE_SECURITY 로 열어야 한다. (아니면 보안상 이유 예외)

 

example

Context Other = createPackageContext("com.android",

                                                                       Context.CONTEXT_IGNORE_SECURITY);

FileInputStream fis = Other.openFileInput("test.txt");

byte[] data = new byte[fis.available()];

while (fis.read(data) != -1) { ; }

fis.close();




3) SD Card

 

가상 SD 카드 만들기

 

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

 -> 용량은 8M 이상

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

 

 

   3-1) SD 카드 접속

 

 

SD 카드의 파일을 엑세스 하려면 허락! 을 받아야 한다. 

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


 

 

static String getExternalStorageState() 

 : SD 카드의 현재 상태 조사 MEDIA_MOUNTED / MEDIA_UNMOUNTED

 

static File getExternalStorageDirectory()

  : SD 카드가 마운트된 경로. 보통 /sdcard

 

static File getRootDirectory()

static File getDataDirectory()

static File getDownloadCacheDirectory()

 

 

example

String ext = Environment.getExternalStorageState();

String sdpath = Environment.getExternalStorageDirectory().getAbsolutePath();

String rootdir = Environment.getRootDirectory().getAbsolutePath();

String datadir = Environment.getDataDirectory().getAbsolutePath();

String cachedir = Environment.getDownloadCacheDirectory().getAbsolutePath();

 

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) {;}