안드로이드 자바

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

teamnova 2023. 6. 22. 12:00
728x90

 

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

생성될 텍스트 파일의 위치는 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>