버튼 4개. 입력 필드, 읽어온 값 보여질 부분 생성.
(1) activity_main.xml
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 : 다른 응용프로그램이 파일을 기록할 수 있도록 허용한다.
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 |