파일을 저장, 삭제, 읽기 예제

 

 버튼 4개. 입력 필드, 읽어온 값 보여질 부분 생성.

 

(1) activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/edtData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/btnSave"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="저장"
            android:layout_weight="1"
            />

        <Button
            android:id="@+id/btnLoad"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="파일읽기1" />

        <Button
            android:id="@+id/btnDelete"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="파일삭제"
            android:layout_weight="1"
            />

        <Button
            android:id="@+id/btnLoad1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="파일읽기2"
            android:layout_weight="1"
            />
    </LinearLayout>

    <EditText
        android:id="@+id/edtStr"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="top"
        android:enabled="false"
        android:autoText="false"
        android:ems="10"
        android:inputType="textMultiLine" />

</LinearLayout>

 

(2) MainActivity.java

 [파일처리]
 - 안드로이드에서 자바의 모든 입출력기능을 다 사용할수는 없으며, 보안상의 이유로 임의위치의 파일을 아무나 읽고 쓸수는 없다. 응용프로그램은 허가받은 위치에만 파일을 생성할 수 있고, 자신이 만든 파일만 액세스 할 수 있다.
 ( 단, 콘텐트프로바이더를 이용하면 다른 프로그램도 접근 가능 )
 
- 파일의 생성모드
 MODE_PRIVATE : 혼자만 사용하는 배타적모드의 파일 생성(기본모드)
 MODE_APPEND : 덮어씌우지 않고 추가모드로 연다.
 MODE_WORLD_READABLE : 다른 응용프로그램이 파일을 읽을 수 있도록 허용한다.
 MODE_WORLD_WRITABLE : 다른 응용프로그램이 파일을 기록할 수 있도록 허용한다.

 

package com.example.test25_file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    EditText edtData;
    EditText edtStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //editText 참조값 얻어오기.
        edtData = (EditText)findViewById(R.id.edtData);
        edtStr  = (EditText)findViewById(R.id.edtStr);
        //버튼에 이벤트 등록하기
        findViewById(R.id.btnSave).setOnClickListener(this);
        findViewById(R.id.btnLoad).setOnClickListener(this);
        findViewById(R.id.btnDelete).setOnClickListener(this);
        findViewById(R.id.btnLoad1).setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.btnSave: save();break;
        case R.id.btnLoad: load();break;
        case R.id.btnDelete: remove();break;
        case R.id.btnLoad1: load1();break;
        }
    }
    //파일삭제하기
    public void remove(){
        String msg="";
        if(deleteFile("test.txt")){
            msg="파일삭제에 성공했습니다.";
        }else{
            msg="파일삭제에 실패했습니다.";
        }
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }
    // raw 특정폴더의 파일읽어오기.
    public void load1(){
        //raw폴더안의 파일을 읽어오기 위한 스트림 객체
        InputStream is = getResources().openRawResource(R.raw.arirang);
        try{
            //리소스자원의 크기만큼 배열 만들기
            byte []b = new byte[is.available()];
            //파일에서 읽어와 b에 저장
            is.read(b);
            // 바이트배열을 string객체로 변환하여 만들기
            String str=new String(b,"euc-kr");
            //에디트텍스트에 문자열 넣기
            edtStr.setText(str);
            //파일닫기
            is.close();
        }catch(IOException ie){
            Log.i("logMsg", ie.getMessage());
        }
    }
    //파일에서 읽어오기
    public void load(){
        FileInputStream fis = null;
        try{
            //파일을 읽기위한 스트림 객체 얻어오기.
            fis=openFileInput("test.txt");
            //읽어온 문자열을 저장할 문자열 객체
            StringBuffer sb=new StringBuffer();
            //문자열을 읽어와 저장할 배열
            byte []b=new byte[255];
            int n=0;
            while((n=fis.read(b))!=-1){//파일에서 읽어와 b배열에 저장.
                sb.append(new String(b,0,n));//읽어온 문자열을 sb에 연결
            }
            //파일에서 읽어온 문자열을 에디트텍스트에 보이기
            edtStr.setText(sb.toString());
            fis.close();
        }catch(FileNotFoundException ie){
            edtStr.setText("해당파일이 존재하지 않아요.!");
        }catch(IOException ie){
            Log.i("logMsg",ie.getMessage());
        }
    }
    public void save(){
        FileOutputStream fos=null;
        try{
            fos=openFileOutput("test.txt", Context.MODE_WORLD_READABLE);
            String text=edtData.getText().toString();
            //파일에 1바이트처리스트림으로 출력하기.
            fos.write(text.getBytes());
            //파일닫기
            fos.close();
            Log.i("logMsg","파일저장성공!");
        }catch(IOException ie){
            Log.i("logMsg",ie.getMessage());
        }
    }
}

 

(3) 확인은 이클립스 DDMS모드에서 File Explorer에서 해당 data / data / 해당프로젝트이름 폴더 밑에 보면 확인이 가능하다.

 

'Mobile > Android' 카테고리의 다른 글

#25 ( popup dialog )  (0) 2013.02.03
#23 ( Preference )  (0) 2013.02.03
#22 ( Activity LifeCycle )  (0) 2013.02.03
#21 ( Intent Action : 외부 프로그램과 연결 )  (0) 2013.02.02
#20 ( 다른 Activity 로 text와 이미지 넘기기 )  (0) 2013.02.02

+ Recent posts