본문 바로가기
IDE

Android studio DatePicker FileOutputStream FileInputStream

by 코닛 2025. 1. 24.

LinearLayout에 orientation은 vertical로 설정해준다

(vetrical 수직방향)

일기장에서 쓰일 DatePicker, EditText, Button을 구성해준다

DatePicker의 스타일을

이렇게 바꿔준다.


EditText는 가로는 꽉차게 해주고 높이는 0dp로 하고 레이아웃 가중치는 1로 설정

배경색은 RRGGBB에서 #00ff00으로 초록으로 설정


Button은 가로 꽉 차게 세로 쓰는 영역만큼만 text는 Button으로 써둔다.


데이터 피커를 가운데로 맞춰준다


이제 MainActivity에서 써야하니 각각의 id를 달아준다.

※ id는 소문자로 시작하고 단어가 두개 이상일때는 두번째 단어 앞은 대문자로 해준다.

MainActivity로 넘어와서 쓰일 datePicker, editText, button을 정의해준다.

버튼을 클릭했을 때 일어날 동작을 설정해준다.

해당 날짜에 글을 적고 닫고 해야하니 해당 날짜로 만들어질 파일 이름을 먼저 지정해준다.

파일 이름으로 쓰일 년, 월, 일을 정수 int 변수로 초기화 해줌

이제 String형인 filename을 적어봄

그 다음 editText에 적었던 내용을 가져와서 문자열로 변경한다.

try - FileOutputStream 변수를 선언하고 filename을 가진 파일을 열어 입력 파일 스트림에 저장한다.

editText를 문자열로 가져온 content를 내용에 읽어 들인 후 파일을 닫는다.

파일이 없다면 catch를 이용해 예외처리를 한다.

저장 장소는 안드로이드 스튜디오 오른쪽 아래 오른쪽 탭에 Device File Explorer에 들어가면

data>data>프로젝트명>files 아래에 만들어진다.


파일이 있으면 내용을 읽어들여와 넣고 닫아준 뒤 Toast를 이용해 "파일 쓰기 완료"라고 뜨게 해준다 (길게).보여랏

 

이제 activity_main의 year, monthOfyear, dayOfMonth를

MainActivity에서 쓰고 있던 int 변수 year, monthOfYear, dayOfMonth와 연결해준다.

datePicker를 일기를 쓰거나 수정할 날짜로 갔을 때 내용이 적은 게 있다면 보이게

없다면 일기 없다고 보이게 해보기 전에 filename을 또 불러와야하니 아예 따로 지정해두자

그럼 아까 지정하던 버튼을 눌렀을 때 파일 이름 가져오는 String은 getFilename()를 불러오면 된다.

읽어올 readDiary를 만들어보자

filename은 아까 지정한 getFilename()에서 가져오고

밑에 있던 button은 수정하기 글자가 들어간 button으로 바꿔준다.

내용을 넣어줘야하니 FileInputStream 을 이용해서 filename을 가진 파일이 가진 내용을 읽어오려고 한다.

오류가 뜨니 눌러서 예외처리를 해준다.

파일이 찾을 수 없을 경우 예외처리를 해달라고 뜬거임

파일이 찾을 수 없을 때 버튼은 새로 저장하고

editText는 빈공간으로 힌트는 일기 없음으로 뜨게 해준다.

filename을 가진 파일에 내용일 입력하기 위해 .txt파일을 불러올 BufferedReader를 사용한다.

파일을 가져온 br을 읽어서 <enter> 키 입력 전까진 한 줄로 읽어준다.

한 줄 씩 읽다가 내용이 없으면 멈춰준다.

한 줄 씩 읽은 내용들을 String data 변수로 지정해준다.

이제 editText에 한 줄 씩 읽어서 데려와서 줄 바꿔서 모아둔 data를 넣어준 뒤

버퍼리더를 닫아준다.

package com.kh.simple_diary;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {
    DatePicker datePicker;
    EditText editText;
    Button button;
    int year, monthOfYear, dayOfMonth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        datePicker = findViewById(R.id.datePicker);
        editText = findViewById(R.id.editText);
        button = findViewById(R.id.button);

        datePicker.init(year, monthOfYear, dayOfMonth, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
                MainActivity.this.year = year;
                MainActivity.this.monthOfYear = monthOfYear;
                MainActivity.this.dayOfMonth = dayOfMonth;
            }
        });

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String filename = getFilename();
                String content = editText.getText().toString();
                try {
                    FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
                    fos.write(content.getBytes());
                    fos.close();
                    Toast.makeText(getApplicationContext(),
                            "파일 쓰기 완료",Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    private String getFilename(){
        String filename = MainActivity.this.year + "_";
        filename += (MainActivity.this.monthOfYear + 1) + "_";
        filename += MainActivity.this.dayOfMonth + ".txt";
        return filename;
    }

    private void readDiary(){
        String filename = getFilename();
        button.setText("수정하기");
        try {
            FileInputStream fis = openFileInput(filename);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String data = "";
            while(true){
                String line = br.readLine();
                if (line == null){
                    break;
                }
                data += line +"\n";
            }
            editText.setText(data);
            br.close();
        } catch (FileNotFoundException e) {
            button.setText("새로 저장");
            editText.setText("");
            editText.setHint("일기 없음");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

하다가 이래저래 수정하기도 하도 복잡해서 내용 정리를 위해 적어둠

분명 더 좋거나 다른 방법이 있겠지만 아직 배우고 있는 중이니 넘어가주세욥

'IDE' 카테고리의 다른 글

Android studio raw 폴더 파일 처리  (0) 2025.01.26
Android studio Device File Explorer sdcard  (0) 2025.01.25
Android studio wrap match  (0) 2025.01.23
Android studio Linear Layout  (0) 2025.01.22
The current request is not a multipart request  (0) 2025.01.18