10 차시파일처리 1 학습목표 내장메모리의파일을처리하는방법을배운다. SD 카드의파일을처리하는방법을배운다. 2 확인해볼까? 3 내장메모리파일처리 1) 학습하기 [ 그림 10-1] 내장메모리를사용한파일처리
2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 4 android:layout_height="match_parent" 5 android:orientation="vertical" - 2 -
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 android:padding="10dp" tools:context=".memoryactivity" > <TextView android:gravity="center" android:text=" 사용자정보입력 " /> <LinearLayout > <TextView android:layout_width="wrap_content" android:text=" 사용자이름 : " /> <EditText android:id="@+id/edtname" android:layout_width="0dp" android:layout_weight="1" /> </LinearLayout> <LinearLayout > <TextView android:layout_width="wrap_content" android:text=" 이메일 : " /> <EditText android:id="@+id/edtemail" android:layout_width="0dp" android:layout_weight="1" /> </LinearLayout> <Button android:id="@+id/btnwrite" android:text=" 내장메모리에파일쓰기 " /> <Button android:id="@+id/btnread" - 3 -
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 android:text=" 내장메모리에서파일읽기 " /> <TextView android:layout_margintop="10dp" android:gravity="center" android:text=" 파일에서읽어온내용출력 " /> <TextView android:id="@+id/tvtext" android:background="#cccccc" android:textcolor="#ff0000" android:textsize="20dp" /> </LinearLayout> [ 예제 10-2]MemoryActivity.xml 1 package com.example.memory; 2 3 import java.io.fileinputstream; 4 import java.io.fileoutputstream; 5 import java.io.ioexception; 6 7 import android.app.activity; 8 import android.content.context; 9 import android.os.bundle; 10 import android.view.view; 11 import android.widget.button; 12 import android.widget.edittext; 13 import android.widget.textview; 14 import android.widget.toast; 15 16 public class MemoryActivity extends Activity { - 4 -
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 EditText edtname, edtemail; Button btnwrite, btnread; TextView tvtext; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); settitle(" 간단파일처리 "); edtname = (EditText) findviewbyid(r.id.edtname); edtemail = (EditText) findviewbyid(r.id.edtemail); btnwrite = (Button) findviewbyid(r.id.btnwrite); btnread = (Button) findviewbyid(r.id.btnread); tvtext = (TextView) findviewbyid(r.id.tvtext); btnwrite.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view v) { // TODO Auto-generated method stub try { FileOutputStream outfs = openfileoutput("memory.txt", Context.MODE_WORLD_WRITEABLE); String str = " 사용자이름 : " + edtname.gettext().tostring() + "\n이메일: " + edtemail.gettext().tostring(); outfs.write(str.getbytes()); outfs.close(); Toast.makeText(getApplicationContext(), " 사용자정보가 memory.txt에저장되었습니다.", 0).show(); } catch (IOException e) { } } }); btnread.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view v) { - 5 -
57 // TODO Auto-generated method stub 58 try { 59 FileInputStream infs = openfileinput("memory.txt"); 60 byte[] txt = new byte[50]; 61 infs.read(txt); 62 String str = new String(txt); 63 tvtext.settext(str); 64 infs.close(); 65 } catch (IOException e) { 66 Toast.makeText(getApplicationContext(), " 파일이없습니다 ", 0).show(); 67 } 68 } 69 }); 70 } 71 } 39~50행내장메모리에파일쓰기를 try-catch 문으로구현한다. 40~41행 memory.txt에쓰기모드로파일을연다. 42~43행파일에쓰려는사용자정보를문자열로만든다. 44행문자열을파일에쓴다. 이때문자열을 getbytes() 메소드를이용해 byte[] 형으로변경해야한다. 45행파일을닫는다. 46~47행파일이저장되었다는것을토스트로알려준다. 58~67행내장메모리로부터파일읽어오기를 try-catch 문으로구현한다. 59행내장메모리의 /data/data/ 패키지명 /files/memory.txt 파일을읽어온다. 60~62행 byte[] 형변수로파일로부터데이터를읽어와서, 문자열로변경한다. 63행텍스트뷰에읽어온문자열을출력한다. 64행파일을닫는다. 66행읽어오려는파일이없으면토스트를띄운다. - 6 -
[ 그림 10-2] 내장메모리파일처리실행결과 [ 그림 10-3] DDMS 실행 [ 그림 10-4] 파일확인 1-7 -
[ 그림 10-5] 파일확인 2-8 -
[ 그림 10-6] PC 에파일저장 4 SD카드파일처리 1) 학습하기 - 9 -
[ 그림 10-7] AVD 의가상 SD 카드확인 2) 활동하기 활동개요 활동과정 - 10 -
[ 예제 10-3]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 tools:context=".sdcardactivity" > 7 <TextView 8 9 10 android:gravity="center" 11 android:text=" 학생정보입력 " /> 12 <LinearLayout 13 14 > 15 <TextView 16 android:layout_width="wrap_content" 17 18 android:text=" 학번 : " /> 19 <EditText 20 android:id="@+id/edtstnum" 21 android:layout_width="0dp" 22 23 android:layout_weight="1" /> 24 </LinearLayout> 25 <LinearLayout 26 27 > 28 <TextView 29 android:layout_width="wrap_content" - 11 -
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 android:text=" 이름 " /> <EditText android:id="@+id/edtname" android:layout_width="0dp" android:layout_weight="1" /> </LinearLayout> <Button android:id="@+id/btnwrite" android:text="sd카드에파일쓰기 " /> <Button android:id="@+id/btnread" android:text="sd카드에서파일읽기 " /> <TextView android:layout_margintop="10dp" android:gravity="center" android:text=" 파일에서읽어온내용출력 " /> <TextView android:id="@+id/tvtext" android:background="#cccccc" android:textcolor="#ff0000" android:textsize="20dp" /> </LinearLayout> - 12 -
[ 예제 10-4]SDCardActivity.xml 1 package com.example.sdcard; 2 3 import java.io.fileinputstream; 4 import java.io.fileoutputstream; 5 import java.io.ioexception; 6 7 import android.app.activity; 8 import android.content.context; 9 import android.os.bundle; 10 import android.view.view; 11 import android.widget.button; 12 import android.widget.edittext; 13 import android.widget.textview; 14 import android.widget.toast; 15 16 public class SDCardActivity extends Activity { 17 18 EditText edtname, edtstnum; 19 Button btnwrite, btnread; 20 TextView tvtext; 21 String SDPath; 22 23 @Override 24 protected void oncreate(bundle savedinstancestate) { 25 super.oncreate(savedinstancestate); 26 setcontentview(r.layout.main); 27 edtname = (EditText) findviewbyid(r.id.edtname); 28 edtstnum = (EditText) findviewbyid(r.id.edtstnum); 29 btnwrite = (Button) findviewbyid(r.id.btnwrite); 30 btnread = (Button) findviewbyid(r.id.btnread); 31 tvtext = (TextView) findviewbyid(r.id.tvtext); 32 33 SDPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 34 35 btnwrite.setonclicklistener(new View.OnClickListener() { 36 37 @Override 38 public void onclick(view v) { 39 // TODO Auto-generated method stub - 13 -
40 File dir = new File(SDPath + "/dir"); 41 dir.mkdir(); 42 File file = new File(SDPath + "/sdcard.txt"); 43 try { 44 FileOutputStream outfs = new FileOutputStream(file); 45 String str = " 학번 : " + edtstnum.gettext().tostring() 46 + "\n이름: " + edtname.gettext().tostring(); 47 outfs.write(str.getbytes()); 48 outfs.close(); 49 Toast.makeText(getApplicationContext(), 50 " 학생정보가 sdcard.txt에저장되었습니다.", 0).show(); 51 } catch (IOException e) { 52 } 53 } 54 }); 55 56 btnread.setonclicklistener(new View.OnClickListener() { 57 58 @Override 59 public void onclick(view v) { 60 // TODO Auto-generated method stub 61 try { 62 FileInputStream infs = new FileInputStream(SDPath + "/dir/sdcard.txt"); 63 byte[] txt = new byte[50]; 64 infs.read(txt); 65 String str = new String(txt); 66 tvtext.settext(str); 67 infs.close(); 68 } catch (IOException e) { 69 Toast.makeText(getApplicationContext(), " 파일이없습니다 ", 0).show(); 70 } 71 } 72 }); 73 } 74 } 33행 SD카드의절대경로를얻어와서 SDPath에대입한다. 40~41행 SD카드에 [dir] 폴더를생성한다. 42, 44행 [mnt]-[sdcard]-[dir] 폴더에 "sdcard.txt" 파일을생성하고쓰기위해연다. 62행 [mnt]-[sdcard]-[dir] 폴더에 "sdcard.txt" 파일을읽기위해파일을연다. - 14 -
[ 그림 10-8] SDCard 파일쓰기권한퍼미션설정 - 15 -
[ 그림 10-9] SDCard 파일처리실행결과 [ 그림 10-10] [mnt]-[sdcard] 폴더에 [dir] 폴더와 sdcard.txt 파일생성 - 16 -
5 배운내용정리 6 학습확인하기 7 지식창고 참고문헌 참고사이트 - 17 -
- 18 -