Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 txt 파일로 목록 저장하고 읽어오는 방법

이 튜토리얼에서는 안드로이드 앱에서 목록(List) 데이터를 txt 파일에 저장하고, 저장된 파일에서 다시 목록을 읽어오는 방법을 단계별로 알아봅니다. 사용자가 입력한 텍스트를 내부 저장소의 파일로 저장한 뒤, 해당 파일을 읽어 화면에 출력하는 간단한 예제입니다.

1단계: 새 프로젝트 생성

Android Studio를 실행한 후 File → New Project 메뉴로 이동하고, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하여 새 프로젝트를 만듭니다.

2단계: 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <EditText
      android:id = "@+id/enterText"
      android:hint = "Please enter text here"
      android:layout_width = "match_parent"
      android:layout_height = "wrap_content" />
   <Button
      android:id = "@+id/save"
      android:text = "Save"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content" />
   <TextView
      android:id = "@+id/output"
      android:layout_width = "wrap_content"
      android:textSize = "25sp"
      android:layout_height = "wrap_content" />
</LinearLayout>

위 레이아웃에는 EditText(텍스트 입력창), Button(저장 버튼), TextView(출력 영역)가 배치되어 있습니다. 사용자가 버튼을 클릭하면 EditText에 입력된 데이터를 가져와 내부 저장소의 /data/data/<your.package.name>/files/text/sample.txt 경로에 저장하고, 이어서 sample.txt 파일의 내용을 읽어 TextView에 표시합니다.

3단계: MainActivity 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
    Button save;
    ArrayList<String> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<>();
        final TextView output = findViewById(R.id.output);
        final EditText enterText = findViewById(R.id.enterText);
        save = findViewById(R.id.save);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!enterText.getText().toString().isEmpty()) {
                    File file = new File(MainActivity.this.getFilesDir(), "text");
                    if (!file.exists()) {
                        file.mkdir();
                    }
                    try {
                        File gpxfile = new File(file, "sample");
                        FileWriter writer = new FileWriter(gpxfile);
                        writer.append(enterText.getText().toString());
                        writer.flush();
                        writer.close();
                        output.setText(readFile());
                        Toast.makeText(MainActivity.this, "Saved your text", Toast.LENGTH_LONG).show();
                    } catch (Exception e) { }
                }
            }
        });
    }
    private String readFile() {
        File fileEvents = new File(MainActivity.this.getFilesDir() + "/text/sample");
        StringBuilder text = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileEvents));
            String line;
            while ((line = br.readLine()) != null) {
                list.add(line);
                text.append(line);
                text.append('\n');
            }
            br.close();
        } catch (IOException e) { }
        String result = Arrays.toString(new ArrayList[]{list});
        return result;
    }
}

핵심 로직을 살펴보면 다음과 같습니다.
- 파일 저장: getFilesDir()로 앱의 내부 저장소 경로를 얻고, 'text' 폴더가 없으면 mkdir()로 생성한 뒤 FileWriter를 사용해 입력값을 파일에 기록합니다.
- 파일 읽기: BufferedReader의 readLine()으로 파일을 한 줄씩 읽어 ArrayList에 추가하고, 각 줄을 개행 문자와 함께 StringBuilder에 누적해 반환합니다.

참고로 위 예제에서는 FileWriter가 기본 덮어쓰기 모드로 동작합니다. 기존 내용을 유지하면서 계속 데이터를 추가하고 싶다면 new FileWriter(gpxfile, true)처럼 두 번째 인자에 true를 전달하여 append 모드로 생성하면 됩니다.

4단계: 매니페스트 설정

manifest.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
    package = "com.example.andy.myapplication">
    <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup = "true"
        android:icon = "@mipmap/ic_launcher"
        android:label = "@string/app_name"
        android:roundIcon = "@mipmap/ic_launcher_round"
        android:supportsRtl = "true"
        android:theme = "@style/AppTheme">
        <activity android:name = ".MainActivity">
            <intent-filter>
                <action android:name = "android.intent.action.MAIN" />
                <category android:name = "android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

매니페스트에는 외부 저장소 읽기·쓰기 권한(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)을 선언했습니다. 이 예제는 앱 내부 저장소만 사용하므로 필수는 아니지만, 추후 외부 저장소로 확장할 경우를 대비해 포함하는 것이 좋습니다.

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 모바일 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 실행 대상으로 자신의 모바일 기기를 선택하세요. 그러면 기기에 아래와 같은 기본 화면이 표시됩니다.

안드로이드에서 txt 파일로 목록 저장하고 읽어오는 방법

화면에 텍스트를 입력하고 Save 버튼을 클릭하면 아래와 같이 저장이 완료됩니다.

안드로이드에서 txt 파일로 목록 저장하고 읽어오는 방법

정상적으로 저장되었는지 확인하려면 Device File Explorer 등을 통해 /data/data/<your.package.name>/files/text/sample.txt 파일을 열어 내용을 확인하면 됩니다.

안드로이드에서 txt 파일로 목록 저장하고 읽어오는 방법