티스토리 뷰

학교공부/안드로이드

chapter 8 (파일처리)

날따라해봐요요롷게 2021. 4. 21. 22:47

(참조 : Android Studio를 활용한 안드로이드 프로그래밍)

 

- 파일처리의 기본

- 파일처리의 응용

 

예제(8-10, 8-12, 8-13)

 

# 파일처리의 기본

 : 내장 메모리 파일 처리

파일을 읽기 위해 안드로이드 Context 클래스의 openFileInput() 메소드를 사용하고, FileInputStream을 반환한다.

파일을 쓰기 위해서는 openFileOutput() 메소드를 사용하고 FileOutputStream을 반환한다.

그리고 java에서 제공하는 파일을 읽고 쓰기 위해서 FileInputStream,FileOutputStream 클래스의 read(), write() 메소드를 사용한다.

 

- 파일처리 절차

1. openFileOutput(), openFileInput() 으로 열기

2. read(), write() 메소드르 파일 읽기/쓰기

3. close() 로 파일 닫기

 

- raw 폴더 파일 처리

/res/raw 폴더에 필요한 파일을 저장해서 사용하기

/res/raw 는 프로젝트에 포함된 폴더이므로 읽기 전요으로만 가능하고 쓰기는 할 수 없다.

쓰기는 내장 메모리 SD카드를 사용해야 한다. 

public void onCreate(Bundle savedInstanceState){
	super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnRead;
    //내부클래스에 접근하기 위해 final 에디트텍스트를 사용한다.
    final EditText edtRaw;
    btnRead = (Button)findViewById(R.id.btnRead);
    edtRaw = (EditText)findViewById(R.id.etdRaw);
    
    btnRead.setOnClickListener(new View.onClickListener() {
    	public void onClick(View v){
        	try{
            	InputStream inputS = getResource().openRawResource(R.raw.raw_test);
                byte[] txt = new byte[inputS.available()];
                inputS.read(txt);
                edtRaw.setText(new String(txt));
                inputS.close();
            }catch(IOException e) { }
        }
    });
}

 : raw 폴더의 txt 파일에 접근하기 위해 Context 클래스의 정적 메소드인 get.Resource() 는 현재 패키지의 리소스를 반환한다. openResource는 읽기 용으로 resource를 열고 InputStream 형을 반환한다.

inputStream.available() 메소드는 입력 스트림에서 읽을 수 있는 바이트 수를 반환한다.

입력 스트림으로 데이터를 읽어 txt 변수에 넣고 txt를 String(문자열)로 변환하여 edtRaw에 출력한다.

 

- 파일 처리의 응용

SD 카드에서 파일 읽기

SD카드 폴더에 텍스트 파일을 하나 올려 놓는다.

접근 하기 위해서는 AndroidManifest.xml 파일에 SD카드를 사용할 수 있도록 퍼미션을 지정해야 한다.

<application> 관련속성을 추가한다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application 
     android:requestLegacyExternalStorage="true"

 

##예제 8-10 - SD 카드에서 파일 읽기 xml

<LinearLayout>
	<Button
    	android:id="@id/btnRead"
        android:text="SD 카드에서 파일 읽기" />
    <EditText
    	android:id="@id/edtSD"
        android:lines="10" />
</LinearLayout>

##예제 8-11 - SD 카드에서 파일 읽기 java 코드

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnRead;
        final EditText edtSD;
        btnRead = (Button)findViewById(R.id.btnRead);
        edtSD = (EditText)findViewById(R.id.edtSD);
        ActivityCompat.requestPermissions(this, new String[]
        	{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);
       	  
        btnRead.setOnClickListener(new View.OnClickListener(){
        	public void onClick(View v) {
            try {
            	FileInputStream inFs = new FileInputStream("절대주소");
                byte[] txt = new byte[inFs.available()];
                inFs.read(txt);
                edtSD.setText(new String(txt));
                inFs.close();
            } catch(IOException e) {
            
            	}
            }
        });
 	}           

 : 절대 주소는 /sdcard 또는 /storage/emulator/0 폴더에 텍스트파일을 올려 놓는다.

 

##예제 8-12 - SD카드에 폴더 및 파일 생성의 XML

<LinearLayout>
	<Button
    	android:id="@id/btnMkdir"
        android:text="SD 카드에 디렉터리 생성" />
    <Button
    	android:id="@id/btnRmdir"
        android:lines="SD 카드에서 디렉터리 삭제" />
</LinearLayout>

##예제 8-13 - SD 카드에 폴더 및 파일 생성의 JAVA 코드

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, new String[]
        	{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);
        Button btnMkdir,btnRmdir;
        btnMkdir = (Button)findViewById(R.id.btnMkdir);
        btnRmdir = (Button)findViewById(R.id.btnRmdir);
        final String strSDpath = Environment.getExternalStorageDirectory().getAbsolutePath();
        final File myDir = new File(strSDpath + "/mydir");
        
        btnMkdir.setOnClickListener(new View.OnClickListener(){
        	public void onClick(View v){
            	myDir.mkdir();
            }
        });
        btnRmdir.setOnClickListenter(new View.OnClickListener() {
        	public void onClick(View v){
            	myDir.delete();
            }
        });
    }

SD 카드의 절대 경로를 돌려준다. getExternalStorageDirectory() 메소드로 반환한다.

SD 카드의 경로 아래에 mydir 폴더를 생성하기 위해 File 형의 변수를 설정했다.

 

##연습문제1 - 내장 메모리에 파일을 처리하는 Context 클래스의 메소드 2개와 내장 메모리의 저장 위치를 쓰시오

 : openFileOutput() - 파일 쓰기

   openFileInput() - 파일 읽기

내장 메모리의 위치 - /data/data/패키지명/files 폴더이다.

 

##연습문제2 - Calendar 클래스 없이 코드 구현

// Calendar cal = Calendar.getInstance();

int cYear = 

int cMonth = 

int cDay = 

 

 

##연습문제3- /res/raw 폴더의 mytext.txt 파일을 읽는 java 코드

: raw 폴더에 필요한 파일을 저장해서 사용하기 위해서는 openRawResource() 메소드를 사용하여 접근한다.

FileInputResource 클래스 대신 InputStream 클래스를 사용

 

InputStream inputS = getResource().openRawResource("mytext.txt");

byte[] txt = new byte[inputS.available()];

inputS.read(txt);

 

 

##연습문제4 - SD카드에 파일을 읽거나 쓰기 위해 AndroudManifest.xml 에 추가할 내용 작성

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 퍼미션 추가
<application  
     android:requestLegacyExternalStorage="true" - application관련 속성을 추가

 

##연습문제5 - 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 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
글 보관함