데이터 저장소의 파일 저장소 - 첫 번째 줄 코드 안드로이드 학습 노트

1. 안드로이드 데이터 저장소
안드로이드 시스템은 주로 데이터 지속화 기능을 간단하게 실현하는 세 가지 방식을 제공했다. 즉, 파일 저장,Shared Preference 저장과 데이터베이스 저장이다.물론 이 세 가지 방식을 제외하고는 휴대전화의SD카드에 데이터를 저장할 수 있다.
2. 파일 저장소
파일 저장은 저장된 내용을 어떠한 포맷 처리도 하지 않고 모든 데이터를 파일에 고스란히 저장하기 때문에 간단한 텍스트 데이터나 이진 데이터를 저장하는 데 비교적 적합하다.
1. 
파일에 데이터 저장
openFileOutput () 방법으로 데이터를 지정한 파일에 저장할 수 있습니다.두 개의 매개변수를 수신합니다.
첫 번째 파라미터는 파일 이름입니다. 모든 파일은/data/data//files/디렉터리에 기본적으로 저장됩니다.두 번째 매개변수는 파일의 작동 모드입니다. 주로 두 가지 모드를 선택할 수 있습니다. MODEPRIVATE 및 MODEAPPEND. 여기서 MODEPRIVATE는 기본 작동 모드로, 같은 파일 이름을 지정할 때 기록된 내용이 원래 파일의 내용을 덮어쓰고 MODEAPPEND는 파일이 이미 존재하면 파일에 내용을 추가하고 존재하지 않으면 새 파일을 생성합니다.예:
activity_main.xml에는 텍스트 내용을 입력하기 위해 레이아웃에 EditText가 추가되었습니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="   "/>
</LinearLayout>

MainActivity:
<span style="font-weight: normal;">package com.example.filepersistencetest;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;


public class MainActivity extends Activity {
	private EditText edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit=(EditText)findViewById(R.id.edit);
    }

    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	String inputText=edit.getText().toString();
    	save(inputText);
    }
    
    public void save(String inputText){
    	FileOutputStream out = null;
    	BufferedWriter writer = null;
    	try{
    		out=openFileOutput("data", Context.MODE_PRIVATE);
    		writer= new BufferedWriter(new OutputStreamWriter(out));
    		writer.write(inputText);
    	}catch(IOException e){
    		e.printStackTrace();
    	}finally{
    		try{
    			if(writer!=null){
    				writer.close();
    			}
    		}catch(IOException e){
    			e.printStackTrace();
    		}
    	}
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}</span>

우선 OnCreate () 방법에서 EditText의 실례를 얻은 다음에 OnDestroy () 방법을 다시 썼습니다. 그러면 활동이 소각되기 전에 반드시 이 방법을 사용할 수 있습니다.onDestroy () 방법에서 EditText에서 입력한 내용을 가져오고save () 방법을 사용해서 입력한 내용을 파일에 저장합니다. 파일은 데이터라고 명명됩니다.
save ()에서 OpenFile Output () 방법을 통해 File Output Stream 대상을 얻은 다음 그것을 빌려 Output Stream Writer 대상을 구축한 다음 Output Stream Writer를 사용하여 Buffered Writer 대상을 구축하면 Buffered Writer를 통해 텍스트 내용을 파일에 쓸 수 있습니다.
DDMS 보기로 전환하고 FileExplorer 전환 카드를 누르면/data/data/com에 들어갑니다.example.persistencetest/files/디렉터리에서 데이터 파일이 생성된 것을 볼 수 있습니다.
2. 파일에서 데이터를 읽는 openFileInput() 방법은 파일에서 데이터를 읽는 데 사용됩니다.읽을 파일 이름만 수신한 다음/data/data//files/디렉터리에 자동으로 이 파일을 불러오고 File InputStream 대상을 되돌려줍니다.예: EditText는 프로그램을 시작할 때 마지막으로 입력한 내용을 그대로 유지할 수 있습니다.
<span style="font-weight: normal;">    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit=(EditText)findViewById(R.id.edit);
        String inputText=load();
        if(!TextUtils.isEmpty(inputText)){
        	edit.setText(inputText);
        	edit.setSelection(inputText.length());
        	Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show();
        }
    }</span>
<span style="font-weight: normal;">    public String load() {
    	FileInputStream in = null;
    	BufferedReader reader = null;
    	StringBuilder content = new StringBuilder();
    	try {
			in= openFileInput("data");
			reader= new BufferedReader(new InputStreamReader(in));
			String line = "";
			while((line=reader.readLine())!=null){
				content.append(line);
			}
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			if(reader!=null){
				try {
					reader.close();
				} catch (IOException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
			}
		}
    	return content.toString();
    }</span>

onCreate () 방법에서load () 방법을 사용하여 파일에 저장된 텍스트 내용을 읽습니다. 읽은 내용이 비어 있지 않으면 EditText의 setText () 방법을 사용해서 EditText에 내용을 채우고 setSelection 방법을 사용해서 입력 커서를 텍스트의 끝 위치로 이동해서 계속 입력하고 팝업합니다.
복원에 성공한 힌트 
load () 방법에서 먼저 OpenFile Input () 방법으로 File Input Stream 대상을 얻은 다음에 이를 빌려 Input Stream Reader 대상을 구축한 다음에 Input Stream Reader를 사용하여 Buffered Reader 대상을 구축하면 Buffered Reader를 통해 한 줄 한 줄 읽을 수 있습니다.파일의 모든 텍스트 내용을 읽고 StringBuilder 대상에 저장합니다.

좋은 웹페이지 즐겨찾기