앱 개발을 하면서 간단한 키값 정도의 데이터는 데이터베이스를 사용하기 보다는 파일에 저장해서 사용하는게 편한 경우가 있어 파일 쓰기 및 읽기 테스트를 해 봅니다만들어 보는 최종 모습은 좀 엉성하지만 button 하나와 textview 하나 입니다.


android file write read


1. 프로젝트 생성

 

먼저 간단하게 프로젝트를 하나 만들고


android file write read


Empty Activity를 선택 합니다.


android file write read


Name은 적당히 적어주고 package copycoding.tistory.filetest로 하였습니다.



layout은 아이템이 2개밖에 없으니 TextView는 기본으로 생성되는 Hello World를 사용하고 id만 추가해 주었고 버튼은 OnClick을 추가해서 함수를 바로 호출 하도록 했습니다.

 

<TextView

        android:id="@+id/fileContents"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Hello World!"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintLeft_toLeftOf="parent"

        app:layout_constraintRight_toRightOf="parent"

        app:layout_constraintTop_toTopOf="parent" />

 

    <Button

        android:id="@+id/button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginStart="76dp"

        android:layout_marginLeft="76dp"

        android:layout_marginTop="108dp"

        android:text="Button"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        android:onClick="btnClick"/>

 

프로그램도 일반적인 java로 구현한 파일 읽기 쓰기와 비슷 합니다.

버튼을 클릭 하면 만들어 놓은 writeFile() 함수에 파일명과 데이터를 보내 파일에 쓰기를 하고 readFile()을 이용하여 입력된 내용을 읽어 옵니다그리고 읽어온 내용을 textView에 출력하는 내용 입니다.


public void btnClick(View view) {

try {

writeFile("testFile.txt", "testtttttttt");

            String rFile = readFile("testFile.txt");

            textView.setText(rFile);

        } catch (IOException e) {

            e.printStackTrace();

        }

}

 

writeFile() 함수는 전달받은 내용을 파일에 쓰기를 하고

OutputStreamWriter oStreamWriter = new OutputStreamWriter(openFileOutput(fileName,

                    Context.MODE_PRIVATE));

oStreamWriter.write(msg);

oStreamWriter.close();

 

readFile() 함수는 파일에서 내용을 읽어 옵니다.

InputStream iStream = openFileInput(fileName);

if(iStream != null) {

InputStreamReader iStreamReader = new InputStreamReader(iStream);

    BufferedReader bufferedReader = new BufferedReader(iStreamReader);

    String temp = "";

    StringBuffer sBuffer = new StringBuffer();

    while((temp = bufferedReader.readLine()) != null) {

         sBuffer.append(temp);

}

iStream.close();

fileContents = sBuffer.toString();

 

파일 읽기와 쓰기에 사용된 입출력 함수는 위에서 사용한 함수 이외에 FileInputStream, FileOutputStream 등 다른 함수를 이용해도 되고 본인이 알고 있는 함수를 사용하면 됩니다.

 

프로그램을 실행하고 BUTTON을 눌러서 결과를 확인 합니다.


android file write read



2. 생성 파일 확인

 

결과를 확인했으니 생성된 testFile.txt 파일도 확인해 봅니다파일 탐색기를 이용해 확인을 하려고 하면 파일을 제대로 확인 할 수 없습니다안드로이드 스튜디오에서 제공하는 Device File Explorer를 이용하면 쉽게 확인이 가능 합니다.

 

메뉴에서


View > Tool Windows > Device File Explorer


를 선택 하면 


android file write read


Android Studio 우측에 현재 연결된 핸드폰의 내용을 탐색할 수 있습니다.


android file write read


프로젝트와 관련된 파일들은 package 으로 폴더가 /data/data/ 아래 생성 되는데 현재 만든 프로젝트의 패키지가 copycoding.tistory.filetest 이니 좀더 아래에 생성되어 있겠네요. 스크롤을 아래로 내려서


android file write read


폴더가 생성되어 있으니 확장을 하고 msg를 저장한 testFile.txt 파일을 더블클릭해서 열어 봅니다.


android file write read

 

그러면 저장된 파일 내용을 확인할 수 있습니다.

 

 

3. 전체 소스


activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:app="http://schemas.android.com/apk/res-auto"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context=".MainActivity">

    <TextView
       
android:id="@+id/fileContents"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:text="Hello World!"
       
app:layout_constraintBottom_toBottomOf="parent"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintTop_toTopOf="parent" />

    <Button
       
android:id="@+id/button"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:layout_marginStart="76dp"
       
android:layout_marginLeft="76dp"
       
android:layout_marginTop="108dp"
       
android:text="Button"
       
app:layout_constraintStart_toStartOf="parent"
       
app:layout_constraintTop_toTopOf="parent"
       
android:onClick="btnClick"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

MainActivity.java


package copycoding.tistory.filetest;
import
androidx.appcompat.app.AppCompatActivity;
import
android.content.Context;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.TextView;
import
java.io.BufferedReader;
import
java.io.FileNotFoundException;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.io.OutputStreamWriter;

public class
MainActivity extends AppCompatActivity {
    TextView
textView;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
       
textView = (TextView) findViewById(R.id.fileContents);
   
}
   
private void writeFile(String fileName, String msg) {
       
try {
            OutputStreamWriter oStreamWriter =
new OutputStreamWriter(openFileOutput(fileName,
                   
Context.MODE_PRIVATE));
           
oStreamWriter.write(msg);
           
oStreamWriter.close();
       
} catch(FileNotFoundException e) {
            e.printStackTrace()
;
       
} catch (IOException e) {
            e.printStackTrace()
;
       
}
    }

   
private String readFile(String fileName) throws IOException {
        String fileContents =
"";
        try
{
            InputStream iStream = openFileInput(fileName)
;
            if
(iStream != null) {
                InputStreamReader iStreamReader =
new InputStreamReader(iStream);
                
BufferedReader bufferedReader = new BufferedReader(iStreamReader);
               
String temp = "";
               
StringBuffer sBuffer = new StringBuffer();
                while
((temp = bufferedReader.readLine()) != null) {
                    sBuffer.append(temp)
;
               
}
                iStream.close()
;
               
fileContents = sBuffer.toString();
           
}
        }
catch (FileNotFoundException e) {
            e.printStackTrace()
;
       
}
       
return fileContents;
    
}

    public void btnClick(View view) {
       
try {
            writeFile(
"testFile.txt", "testtttttttt");
           
String rFile = readFile("testFile.txt");
           
textView.setText(rFile);
       
} catch (IOException e) {
            e.printStackTrace()
;
       
}
    }
}

 

- copy coding -



+ Recent posts