도래울

[Android] 파일 입출력 하기 본문

개발/Android

[Android] 파일 입출력 하기

도래울 2016. 2. 5. 13:04

안드로이드 자체에는 파일관리 기능이 따로 포함되어 있지 않다. 대신 파일 시스템은 리눅스 것을 그대로 사용하며 라이브러리는 자바를 사용한다.
안드로이드 보안상 이유로 임의 위치의 파일을 아무나 읽고 쓸수 없도록 되어 있는데 이러한 제한을 위해 Context클래스는 보안이 적용된 파일 관리 메소드를 별도 제공한다.

아래는 파일 오픈 시 사용하는 메소드 이다.

FileOutputStream openFileOutput (String name, int mode)
FileInputStream openFileInput (String name)

파일의 위치는 /data/data/패키지명/files 디렉토리로 정해져 있으며 임의 경로의 파일을 마음대로 열 수 없다.

파일 생성시에는 아래 mode 중 하나를 지정한다.
 mode 설명
 MODE_PRIVATE 혼자만 사용하는 배타적인 모드로 파일 생성. 
 이 MODE가 DEFAULT이다.
 MODE_APPEND 파일이 이미 존재할 경우 덮어쓰기 모드가 아닌 추가 모드로 연다. 이후 기록되는 내용은 기존 내용 뒤에 덧붙혀진다.
 MODE_WORLD_READABLE 다른 응용 프로그램이 파일을 읽을 수 있게 허용한다.
 MODE_WORLD_WRITEABLE 다른 응용 프로그램이 파일을 기록할 수 있게 허용한다.

아래 메소드는 파일을 삭제하거나 파일 목록을 구한다.
boolean deleteFile (String name)
String[] fileList()


아래 소스는 파일 생성, 읽기 까지 구현된 소스이다.

 
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <Button 
 android:id="@+id/save"
 android:text="Save"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 />
 
 <Button 
 android:id="@+id/load"
 android:text="Load"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 />
 
 <EditText
 android:id="@+id/edit"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
</LinearLayout>

 
 public class FileIOActivity extends Activity {
 EditText mEdit;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mEdit = (EditText)findViewById(R.id.edit);
        findViewById(R.id.save).setOnClickListener(mClickListener);
        findViewById(R.id.load).setOnClickListener(mClickListener);
    }
    
    View.OnClickListener mClickListener = new View.OnClickListener() {
       public void onClick(View v) {
          // TODO Auto-generated method stub
          switch(v.getId()) {
          case R.id.save :
               try {
                   FileOutputStream fos = openFileOutput("test.txt", Context.MODE_WORLD_READABLE);
                   String str = "Android File IO Test";
                   fos.write(str.getBytes());
                   fos.close();
                   mEdit.setText("write success");
               } catch(Exception e) {
               }
               break;
          case R.id.load :
               try {
                   FileInputStream fis = openFileInput("test.txt");
                   byte[] data = new byte[fis.available()];
                   while(fis.read(data) != -1) {;}
                       fis.close();
                       mEdit.setText(new String(data));
               } catch(Exception e) { 
               }
               break;
         }
     }
  };
}


실제 테스트 해보니 파일 생성해서 Android File IO Test 라는 문자열을 test.txt 라는 파일에 입력하는 것과 test.txt 파일을 읽어서 아래에 있는 EditBox에 출력해서 보여주는 것까지 성공하였다.

Comments