본문 바로가기
안드로이드 자바

[Android][JAVA] 입력한 내용을 텍스트 파일에 저장하기

by teamnova 2023. 6. 22.

 

안녕하세요. 이번 시간에는 입력한 내용을 텍스트 파일에 저장해보겠습니다.

생성될 텍스트 파일의 위치는 Download 폴더의  File폴더 입니다.

 

먼저 실행 결과입니다.

 

 

 

전체 코드입니다.

 

메니페스트에 추가해주세요.

  // 파일을 생성하기 위해 필요한 권한.
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

 

MainActivity.java 파일 코드입니다.

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {


    // 디렉토리 경로
    final static String foldername = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() +"/File";
    // 파일 이름
    final static String filename = "file.txt";
    // 내용 입력받을 view
    EditText textBox;

    // 파일 저장 버튼
    Button btnSave;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textBox = findViewById(R.id.textbox);
        btnSave = findViewById(R.id.btn_save);

        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // 파일 작성시간 (현재시간으로)
                String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
                // 파일 내용 생성
                String contents = "파일 내용 :"+textBox.getText().toString()+" \n 파일 작성 시간 : "+now+"\n";
                // 파일 없으면 생성 후 파일안에 내용 저장.
                WriteTextFile(foldername, filename, contents);

            }
        });


    }

    // foldername : 파일 저장할 디렉토리 경로
    // filename : 파일 이름
    // contents : 저장할 내용.
    public void WriteTextFile(String foldername, String filename, String contents){
        try{

            // foldername 경로의 파일 객체 생성 (디렉토리를 가리키고 있고, 해당 경로에 디렉토리가 없어도 File 객체 생성됨.)
            File dir = new File (foldername);

            //디렉토리 폴더가 없으면 생성함
            if(!dir.exists()){
                // 디렉토리 생성.
                // 만들고자 하는 디렉토리의 상위 디렉토리가 존재하지 않을 경우, 생성 불가
                dir.mkdir();
            }

            // 생성한 FileOutputStream 객체를 통해 파일을 생성, 내용 작성한다.
            // 기존 파일에 내용을 추가 할려면 두번째 인자로 true를 적어 준다. true를 추가해도 없으면 만든다.
            FileOutputStream fos = new FileOutputStream(foldername+"/"+filename, true);

            // 문자열을 바이트배열로 변환해서 파일에 저장한다.
            fos.write(contents.getBytes());

            // 파일 닫기.
            fos.close();

        }catch (IOException e){
            e.printStackTrace();
        }
    }

}

 

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">


    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/textbox"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="텍스트를 입력해주세요."
        android:minLines="3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_save"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="저장하기"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textbox" />


</androidx.constraintlayout.widget.ConstraintLayout>